:root{
  --bg:#F6F1E7; --bg2:#FFFDF8; --ink:#2A2E33; --ink2:#5B636B; --mute:#8E959C; --line:#DED7C8;
  --shu:#D9472F; --shu-soft:#FBE7E2; --ai:#2E4A7A; --ai-soft:#E4EAF3; --wakakusa:#4E9A4C; --wakakusa-soft:#E2F2E0;
  --yamabuki:#E8A317; --yamabuki-soft:#FBF0D6; --murasaki:#6B57A8; --murasaki-soft:#ECE7F7;
  --ui:"Zen Maru Gothic","Hiragino Maru Gothic ProN","Rounded Mplus 1c",sans-serif;
  --book:"Klee One","UD Digi Kyokasho N-R","Hiragino Mincho ProN",serif;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
[hidden]{display:none!important}
html,body{margin:0;min-height:100%}
body{background:var(--bg);color:var(--ink);position:relative;font-family:var(--ui);font-size:20px;line-height:1.6;font-weight:500;overscroll-behavior:none;-webkit-user-select:none;user-select:none}
button{font-family:inherit;font-size:inherit;font-weight:700;color:inherit;border:0;background:none;cursor:pointer;touch-action:manipulation}
body::before{content:"";position:fixed;inset:0;background:var(--bg) url("deco.svg") center/cover no-repeat;z-index:-1;pointer-events:none}
button:focus-visible{outline:3px solid var(--ai);outline-offset:2px}
input,textarea{font-family:inherit;font-size:inherit;-webkit-user-select:text;user-select:text}
ruby rt{font-size:.45em;font-weight:500;color:var(--ink2)}
.screen{min-height:100%;max-width:900px;margin:0 auto;padding:12px 16px 40px;display:flex;flex-direction:column;gap:14px}
.top{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:52px}
.top-right{display:flex;align-items:center;gap:10px}
.brand{font-weight:900;font-size:24px;letter-spacing:.06em;color:var(--ai)}
.ghost{padding:10px 14px;border-radius:14px;color:var(--ai);background:var(--ai-soft);min-height:48px;border:1.5px solid #CBD3E2}
.ghost.small{font-size:15px;min-height:40px;padding:6px 12px}
.timer{font-variant-numeric:tabular-nums;font-weight:900;font-size:22px;color:var(--ink2)}
.mode-tag{font-size:15px;font-weight:700;color:var(--ink2);background:var(--bg2);border:1px solid var(--line);border-radius:999px;padding:4px 12px}
.progress{display:flex;gap:4px}
.progress i{width:10px;height:10px;border-radius:50%;background:var(--line)}
.progress i.on{background:var(--wakakusa)}
.progress i.ng{background:var(--shu)}

.card{background:var(--bg2);border-radius:24px;padding:22px 22px 26px;box-shadow:0 2px 0 var(--line),0 12px 30px rgba(46,74,122,.08);display:flex;flex-direction:column;gap:16px}
.card.center{align-items:center;text-align:center}
h1{font-size:30px;margin:0;font-weight:900}
h2{font-size:22px;margin:0;font-weight:900;color:var(--ink2)}
p{margin:0}
.hint{color:var(--ink2);font-size:17px}
.big{display:flex;align-items:center;justify-content:center;gap:8px;min-height:64px;padding:12px 24px;border-radius:20px;background:linear-gradient(#35558A,#2E4A7A);color:#fff;font-size:22px;font-weight:900;box-shadow:0 4px 0 #1B2F52;width:100%}
.big:active{transform:translateY(3px);box-shadow:0 1px 0 #1B2F52}
.big.shu{background:var(--shu);box-shadow:0 4px 0 #9c2f1f}.big.shu:active{box-shadow:0 1px 0 #9c2f1f}
.big.green{background:var(--wakakusa);box-shadow:0 4px 0 #35702f}.big.green:active{box-shadow:0 1px 0 #35702f}
.big.yellow{background:var(--yamabuki);box-shadow:0 4px 0 #a8730d;color:#3a2a00}.big.yellow:active{box-shadow:0 1px 0 #a8730d}
.big.gray{background:var(--bg);color:var(--ink2);box-shadow:0 4px 0 var(--line)}.big.gray:active{box-shadow:0 1px 0 var(--line)}
.big[disabled]{opacity:.45;pointer-events:none}
.row{display:flex;gap:12px;flex-wrap:wrap}
.row>*{flex:1 1 0}
.choices{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.choice{min-height:72px;border-radius:18px;background:var(--bg);border:3px solid var(--line);font-size:26px;font-weight:900;padding:8px 12px}
.choice.ok{background:var(--wakakusa-soft);border-color:var(--wakakusa)}
.choice.ng{background:var(--shu-soft);border-color:var(--shu)}
.choice.kanji{font-size:44px;font-family:var(--book)}

/* home */
.hero{display:grid;grid-template-columns:120px 1fr 120px;align-items:center;gap:16px;background:var(--bg2);border-radius:24px;padding:18px;box-shadow:0 2px 0 var(--line),0 12px 30px rgba(46,74,122,.08);border-top:8px solid var(--ai)}
@media (max-width:600px){.hero{grid-template-columns:90px 1fr 90px;gap:10px}}
.mascot{width:110px;height:110px;background:url("mascot.svg") center/contain no-repeat;justify-self:center}
.mascot.small-m{width:90px;height:90px}
.bubble{background:var(--ai-soft);border-radius:18px;padding:12px 16px;font-size:19px;position:relative;min-height:60px;display:flex;align-items:center}
.bubble::before{content:"";position:absolute;left:-10px;top:24px;border:8px solid transparent;border-right-color:var(--ai-soft)}
.ring-wrap{position:relative;width:110px;height:110px;justify-self:center}
.ring{width:110px;height:110px;transform:rotate(-90deg)}
.ring-bg{fill:none;stroke:var(--line);stroke-width:10}
.ring-fg{fill:none;stroke:var(--yamabuki);stroke-width:10;stroke-linecap:round;stroke-dasharray:326.7;stroke-dashoffset:326.7;transition:stroke-dashoffset .6s}
.ring-label{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:26px;font-variant-numeric:tabular-nums}
.ring-label small{font-size:13px;color:var(--mute);margin-left:2px}
.streak{display:flex;gap:5px}
.streak i{width:14px;height:14px;border-radius:50%;background:var(--line)}
.streak i.on{background:var(--yamabuki)}
.streak i.today{outline:2px solid var(--ai);outline-offset:1px}
.blocks{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
@media (max-width:600px){.blocks{grid-template-columns:1fr}}
.block{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;padding:22px 12px 18px;border-radius:24px;background:var(--bg2);box-shadow:0 4px 0 var(--line),0 12px 30px rgba(46,74,122,.06);min-height:170px;font-weight:900}
.block:active{transform:translateY(3px);box-shadow:0 1px 0 var(--line)}
.b-ico{width:64px;height:64px;border-radius:20px;display:flex;align-items:center;justify-content:center;font-size:34px;color:#fff;font-family:var(--book)}
.b-kanji .b-ico{background:var(--shu)}.b-read .b-ico{background:var(--wakakusa)}.b-write .b-ico{background:var(--murasaki)}
.b-t{font-size:21px}.b-s{font-size:15px;color:var(--mute);font-weight:700}
.b-done{position:absolute;top:10px;right:14px;width:34px;height:34px;border-radius:50%;background:var(--wakakusa);color:#fff;display:none;align-items:center;justify-content:center;font-size:20px}
.block.done{opacity:.75}.block.done .b-done{display:flex}
.finish{background:var(--yamabuki-soft);border-radius:24px;padding:20px;text-align:center;display:flex;flex-direction:column;gap:14px}
.finish-t{font-size:28px;font-weight:900;color:#7a5300}
.town-btn{background:var(--yamabuki);box-shadow:0 4px 0 #a8730d;color:#3a2a00}

/* kanji */
.kanji-big{font-family:var(--book);font-size:120px;line-height:1;text-align:center;font-weight:600}
.word-big{font-family:var(--book);font-size:44px;text-align:center;font-weight:600}
.word-big ruby rt{font-size:.4em}
.meaning{text-align:center;color:var(--ink2);font-size:19px}
.words{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.words span{background:var(--bg);border-radius:12px;padding:6px 12px;font-family:var(--book);font-size:24px}
.trace-wrap{display:grid;grid-template-columns:minmax(0,360px) 1fr;gap:16px;align-items:start}
@media (max-width:600px){.trace-wrap{grid-template-columns:1fr}}
.trace-box{position:relative;width:min(100%,360px);aspect-ratio:1;margin:0 auto;background:#FFFDF7;border:3px solid var(--line);border-radius:20px;overflow:hidden;touch-action:none}
.trace-box .grid-l{position:absolute;inset:0;background:
 linear-gradient(to right, transparent 49.6%, #E9E4D6 49.6%, #E9E4D6 50.4%, transparent 50.4%),
 linear-gradient(to bottom, transparent 49.6%, #E9E4D6 49.6%, #E9E4D6 50.4%, transparent 50.4%)}
.trace-box svg{position:absolute;inset:0;width:100%;height:100%}
.trace-box svg path{fill:none;stroke-linecap:round;stroke-linejoin:round}
.trace-box .guide path{stroke:#D7D2C4;stroke-width:9}
.trace-box .anim path{stroke:var(--shu);stroke-width:9}
.trace-box .check path{stroke:var(--ai);stroke-width:7;opacity:.55}
.trace-box canvas{position:absolute;inset:0;width:100%;height:100%}
.trace-side{display:flex;flex-direction:column;gap:10px;min-width:180px}
.stroke-count{font-size:17px;color:var(--ink2);text-align:center}
.rate{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px}
.trace-side .rate{grid-template-columns:1fr}
.rate button{min-height:70px;border-radius:18px;font-size:19px;font-weight:900;padding:8px}
.rate .r1{background:var(--shu-soft);color:var(--shu)}.rate .r2{background:var(--yamabuki-soft);color:#7a5300}.rate .r3{background:var(--wakakusa-soft);color:#2f6b2d}
.rest{text-align:center;font-size:26px;font-weight:900;padding:30px 0}
.summary{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;text-align:center}
.summary div{background:var(--bg);border-radius:16px;padding:12px}
.summary b{display:block;font-size:34px;font-variant-numeric:tabular-nums}
.summary small{color:var(--mute);font-size:14px}

/* read */
.passage{font-family:var(--book);font-size:26px;line-height:2.1;letter-spacing:.04em;-webkit-user-select:none}
.passage .sent{border-radius:8px;padding:0 2px;transition:background .3s}
.passage .sent.ng{background:var(--shu-soft);box-shadow:inset 0 -3px 0 var(--shu)}
.passage .sent.ok{background:transparent}
.passage .title{font-weight:600;font-size:30px;display:block;margin-bottom:8px}
.passage p{margin:0 0 .4em}
.mic{display:flex;align-items:center;justify-content:center;gap:10px;min-height:76px;border-radius:22px;background:var(--shu);color:#fff;font-size:22px;font-weight:900;width:100%;box-shadow:0 4px 0 #9c2f1f}
.mic.on{background:#B32E18;animation:pulse 1.2s infinite}
@keyframes pulse{0%,100%{box-shadow:0 4px 0 #9c2f1f,0 0 0 0 rgba(217,71,47,.5)}50%{box-shadow:0 4px 0 #9c2f1f,0 0 0 14px rgba(217,71,47,0)}}
.transcript{min-height:50px;background:var(--bg);border-radius:14px;padding:10px 14px;font-size:18px;color:var(--ink2)}
.dialog{display:flex;flex-direction:column;gap:12px}
.msg{max-width:88%;padding:12px 16px;border-radius:18px;font-size:20px;line-height:1.7}
.msg.tutor{background:var(--ai-soft);align-self:flex-start;border-bottom-left-radius:6px}
.msg.kid{background:var(--wakakusa-soft);align-self:flex-end;border-bottom-right-radius:6px}
.answer-box{display:flex;gap:10px;align-items:stretch}
.answer-box textarea{flex:1;border:3px solid var(--line);border-radius:16px;padding:10px 14px;font-size:22px;min-height:70px;resize:none;font-family:var(--book)}
.answer-box .mic{width:auto;min-width:84px;flex:0 0 auto}
.strategy{display:flex;gap:6px;justify-content:center}
.strategy span{font-size:14px;padding:4px 10px;border-radius:999px;background:var(--bg);color:var(--mute);font-weight:700}
.strategy span.on{background:var(--ai);color:#fff}
.strategy span.done{background:var(--wakakusa);color:#fff}

/* write */
.prompt-box{background:var(--murasaki-soft);border-radius:18px;padding:14px 18px;font-size:22px;font-family:var(--book)}
.compose{width:100%;min-height:220px;border:3px solid var(--line);border-radius:18px;padding:14px 18px;font-size:28px;line-height:1.9;font-family:var(--book);resize:vertical;background:
 repeating-linear-gradient(to bottom, transparent 0, transparent 52px, #EDE9DE 52px, #EDE9DE 54px);background-attachment:local}
.feedback{display:grid;gap:12px}
.fb{border-radius:18px;padding:14px 18px;font-size:20px}
.fb.praise{background:var(--wakakusa-soft);border-left:6px solid var(--wakakusa)}
.fb.suggest{background:var(--shu-soft);border-left:6px solid var(--shu)}
.fb b{display:block;font-size:15px;color:var(--ink2);margin-bottom:4px}

/* town */
.town{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:12px;padding:10px;background:linear-gradient(#DCEBFA 0,#DCEBFA 120px,#CFE6C2 120px);border-radius:24px;min-height:400px}
.house{aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;border-radius:14px;position:relative;font-family:var(--book);font-size:34px;font-weight:600;color:var(--ink)}
.house::before{content:"";position:absolute;top:0;left:10%;right:10%;height:38%;background:var(--shu);clip-path:polygon(50% 0,100% 100%,0 100%);border-radius:4px}
.house::after{content:"";position:absolute;top:36%;left:14%;right:14%;bottom:8%;background:#FFF6DF;border-radius:6px;z-index:0}
.house span{position:relative;z-index:1;margin-bottom:14%}
.house.g3::before{background:var(--ai)}
.house.new::before{background:var(--yamabuki)}
.town-empty{grid-column:1/-1;text-align:center;color:var(--ink2);padding:40px 10px;font-size:20px}

/* parent */
.parent{-webkit-user-select:text;user-select:text;font-size:17px}
.parent h2{font-size:18px;margin-top:8px}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
@media (max-width:600px){.kpis{grid-template-columns:1fr 1fr}}
.kpi{background:var(--bg);border-radius:14px;padding:10px 12px}
.kpi b{display:block;font-size:28px;font-variant-numeric:tabular-nums}
.kpi small{color:var(--mute);font-size:13px}
.field{display:grid;grid-template-columns:150px 1fr;gap:8px 12px;align-items:center;font-size:16px}
@media (max-width:600px){.field{grid-template-columns:1fr}}
.field input[type=text],.field input[type=password],.field input[type=number],.field select{width:100%;padding:8px 10px;border:2px solid var(--line);border-radius:10px;font-size:16px;background:#fff}
.parent table{border-collapse:collapse;width:100%;font-size:15px}
.parent td,.parent th{border-bottom:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top}
.parent .small-btn{padding:8px 14px;border-radius:12px;background:var(--ai-soft);color:var(--ai);font-size:15px;min-height:40px}
.parent .danger{background:var(--shu-soft);color:var(--shu)}
.spark{width:100%;height:60px}
.gate{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center}
.gate input{font-size:32px;width:140px;text-align:center;padding:8px;border:3px solid var(--line);border-radius:14px}
.sheet{background:var(--yamabuki-soft);border-radius:16px;padding:14px 18px;font-size:16px;line-height:1.7}
.sheet ol{margin:6px 0 0;padding-left:1.4em}

.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:var(--ink);color:#fff;padding:12px 20px;border-radius:999px;font-size:18px;font-weight:700;z-index:50;max-width:90%;text-align:center}
.pop{animation:pop .5s}
@keyframes pop{0%{transform:scale(.6);opacity:0}60%{transform:scale(1.08)}100%{transform:scale(1);opacity:1}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* 入口（和紙×藍×桜） */
.entrance{justify-content:center;min-height:100vh;padding:24px 16px}
.entrance-card{position:relative;max-width:900px;width:100%;margin:0 auto;padding:36px 40px 40px;border-radius:30px;gap:14px;overflow:hidden}
.entrance-card::before{content:"";position:absolute;left:0;right:0;top:0;height:12px;background:var(--ai);border-radius:30px 30px 0 0}
.mascot.big-m{width:240px;height:210px;margin-top:2px}
.entrance-title{position:relative;font-size:56px;line-height:1.2;letter-spacing:.04em;padding:0 60px}
.entrance-title::before,.entrance-title::after{content:"";position:absolute;top:50%;width:26px;height:8px;border-radius:4px;background:#F2B7C4;box-shadow:0 -22px 0 -1px #F2B7C4}
.entrance-title::before{left:8px;transform:translateY(-50%) rotate(-35deg)}
.entrance-title::after{right:8px;transform:translateY(-50%) rotate(35deg)}
@media (max-width:600px){.entrance-title{font-size:38px;padding:0 44px}.entrance-card{padding:28px 20px 30px}}
.entrance-hint{font-size:24px;color:var(--ink2);font-weight:500}
.name-field{display:flex;align-items:center;gap:10px;width:100%;max-width:640px;background:#FBF8F1;border:3px solid var(--ai);border-radius:22px;padding:6px 18px;box-shadow:inset 0 2px 0 rgba(46,74,122,.06)}
.name-field .brush-ico{width:44px;height:44px;flex:0 0 auto}
.name-field input{flex:1;border:0;background:transparent;font-size:34px;font-weight:700;text-align:center;padding:10px 44px 10px 0;outline:none;color:var(--ink);min-width:0}
.name-field input::placeholder{color:#7D8590;font-weight:500}
.entrance-btn{position:relative;max-width:640px;min-height:84px;font-size:36px;border-radius:26px;letter-spacing:.06em}
.entrance-btn .chev{position:absolute;right:26px;top:50%;transform:translateY(-50%);width:30px;height:40px;display:block}
.entrance-btn .chev svg{width:100%;height:100%}
#setup .choices{width:100%;max-width:640px}
#setup .choice{background:#FBF8F1}
