/* きいてマスター — design tokens (SPEC §11) and screens (mockup KIKIMASTER_MOCKUP_APPROVED_20260905) */
:root{
  --bg:#0d1120; --bg2:#141a2e; --card:rgba(255,255,255,.06); --line:rgba(255,255,255,.09);
  --text:#eef1f8; --dim:#8d95ab; --dim2:#5d6578;
  --ok:#34d399; --close:#fbbf24; --again:#818cf8;
  --ac:#7ee787; --ac2:#2dd4bf; --acbg:rgba(126,231,135,.14);   /* overridden per subject at boot */
  --radius-card:20px; --radius-btn:20px; --radius-pill:999px;
  --font:'M PLUS Rounded 1c','Noto Sans JP',sans-serif;
  --fs:1;                                                       /* font scale for question/answer/explanation */
  --safe-b:env(safe-area-inset-bottom,0px);
  color-scheme:dark;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%;background:var(--bg);color:var(--text);font-family:var(--font);overflow:hidden}
body{overscroll-behavior:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;touch-action:manipulation}
button:active{transform:scale(.97)}
#app{height:100vh;height:100dvh;display:flex;flex-direction:column;max-width:520px;margin:0 auto;position:relative}

.boot{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--dim);font-weight:800}
.boot-icon{font-size:56px}
.error-box{margin:24px;padding:18px;border:1px solid var(--again);border-radius:var(--radius-card);color:var(--text);font-weight:700;line-height:1.6}

.screen{flex:1;display:flex;flex-direction:column;padding:max(14px,env(safe-area-inset-top)) 18px 0;overflow:hidden;position:relative}
.screen.scroll{overflow-y:auto;-webkit-overflow-scrolling:touch}
.screen::before{content:'';position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse 70% 40% at 50% 0%,var(--acbg),transparent 70%)}
.screen>*{position:relative;z-index:1}
.spacer{flex:1}

/* ---- common ---- */
.topbar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:4px 0 8px;min-height:44px}
.back{width:44px;height:44px;border-radius:12px;background:var(--card);display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0}
.chip{font-size:12px;font-weight:800;color:var(--ac);background:var(--acbg);padding:7px 12px;border-radius:var(--radius-pill);letter-spacing:.04em;white-space:nowrap}
.title{font-size:20px;font-weight:900;text-align:center;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sub{color:var(--dim);font-size:13px;font-weight:700}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-card);padding:16px}
.btn{display:flex;align-items:center;justify-content:center;gap:10px;border-radius:var(--radius-btn);font-weight:900;font-size:18px;min-height:60px;padding:14px 18px;color:#0b1020;background:var(--ac);box-shadow:0 10px 30px rgba(0,0,0,.35);width:100%}
.btn.ghost{background:var(--card);color:var(--text);border:1px solid var(--line);box-shadow:none;font-size:16px;min-height:56px}
.btn.danger{background:rgba(129,140,248,.16);color:var(--again);border:1.5px solid var(--again);box-shadow:none}
.btn[disabled]{opacity:.45}
.bar{height:8px;border-radius:99px;background:rgba(255,255,255,.08);overflow:hidden}
.bar>i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--ac2),var(--ac));transition:width .3s}
.hint{font-size:12px;color:var(--dim);font-weight:700;text-align:center;line-height:1.5}
.row{display:flex;gap:10px;align-items:center}

.tabbar{display:flex;justify-content:space-around;padding:8px 6px calc(8px + var(--safe-b));border-top:1px solid var(--line);background:var(--bg);flex-shrink:0}
.tab{display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11px;font-weight:800;color:var(--dim2);min-width:64px;min-height:48px;justify-content:center}
.tab.on{color:var(--ac)}
.tab .ic{font-size:22px;line-height:1.1}

.toast{position:fixed;left:50%;bottom:calc(90px + var(--safe-b));transform:translateX(-50%);background:#1f2740;color:var(--text);border:1px solid var(--line);padding:12px 16px;border-radius:14px;font-weight:800;font-size:14px;max-width:88vw;text-align:center;z-index:50;box-shadow:0 10px 30px rgba(0,0,0,.5)}
.banner{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:12px 14px;font-size:12.5px;font-weight:700;color:var(--text);line-height:1.6;display:flex;gap:10px;align-items:flex-start}
.banner b{color:var(--ac)}
.banner .x{margin-left:auto;color:var(--dim);font-size:18px;flex-shrink:0;padding:0 4px}

/* ---- home ---- */
.hero{text-align:center;margin-top:8px}
.mascot{width:112px;height:112px;margin:0 auto 8px;border-radius:50%;background:radial-gradient(circle at 35% 30%,rgba(255,255,255,.18),transparent 55%),var(--acbg);display:flex;align-items:center;justify-content:center;font-size:56px;position:relative}
.mascot::after{content:'';position:absolute;inset:-10px;border-radius:50%;border:2px dashed var(--ac);opacity:.45}
.appname{font-size:32px;font-weight:900;letter-spacing:.02em;line-height:1.15}
.appname b{color:var(--ac)}
.stats{display:flex;gap:8px;margin:16px 0 12px}
.stat{flex:1;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:10px 4px;text-align:center}
.stat .v{font-size:22px;font-weight:900;color:var(--ac)}
.stat .v.ok{color:var(--ok)} .stat .v.again{color:var(--again)}
.stat .k{font-size:11px;color:var(--dim);font-weight:700}
.continue{display:block;width:100%;text-align:left;background:linear-gradient(135deg,var(--ac),var(--ac2));border-radius:24px;padding:16px 84px 14px 18px;color:#08101c;position:relative;overflow:hidden;box-shadow:0 12px 30px rgba(0,0,0,.35)}
.continue small{display:block;font-size:12px;font-weight:800;opacity:.75}
.continue strong{display:block;font-size:19px;font-weight:900;margin:3px 0 8px;line-height:1.25}
.continue .bar{background:rgba(8,16,28,.25);width:100%}
.continue .bar>i{background:#08101c}
.continue .play{position:absolute;right:16px;top:50%;transform:translateY(-50%);width:56px;height:56px;border-radius:50%;background:#08101c;color:var(--ac);display:flex;align-items:center;justify-content:center;font-size:22px}
.quick{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}
.quick button{display:flex;flex-direction:column;align-items:flex-start;gap:5px;padding:14px;text-align:left;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-card)}
.quick .ic{font-size:26px}
.quick .t{font-weight:900;font-size:15px}
.quick .d{font-size:11px;color:var(--dim);font-weight:700;line-height:1.4}
.quick .n{font-size:19px;font-weight:900;color:var(--again)}
.quick .n.ac{color:var(--ac)}
.quick .n.off{color:var(--dim2)}

/* ---- units ---- */
.unit{display:flex;gap:12px;align-items:center;width:100%;text-align:left;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-card);padding:14px 12px;margin-bottom:10px}
.unit .no{width:46px;height:46px;border-radius:14px;background:var(--acbg);color:var(--ac);display:flex;align-items:center;justify-content:center;font-weight:900;font-size:20px;flex-shrink:0}
.unit .body{flex:1;min-width:0}
.unit .n{font-weight:900;font-size:16px;line-height:1.3}
.unit .m{font-size:12px;color:var(--dim);font-weight:700;margin:3px 0 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.unit .m b{color:var(--ok)} .unit .m em{color:var(--again);font-style:normal}
.unit .go{width:44px;height:44px;border-radius:50%;background:var(--ac);color:#08101c;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}
.unit.done .go{background:transparent;color:var(--ok);border:2px solid var(--ok)}

/* ---- study ---- */
.prog{display:flex;align-items:center;gap:10px;margin-top:2px}
.prog .bar{flex:1}
.stage{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:14px;min-height:0;overflow:hidden}
.qno{font-size:14px;font-weight:900;color:var(--ac);letter-spacing:.1em}
.ring{width:min(210px,52vw);height:min(210px,52vw);border-radius:50%;position:relative;display:flex;align-items:center;justify-content:center;background:conic-gradient(var(--ac) 0 var(--p,0%),rgba(255,255,255,.08) var(--p,0%) 100%);flex-shrink:0}
.ring::before{content:'';position:absolute;inset:14px;border-radius:50%;background:var(--bg)}
.ring .in{position:relative;display:flex;flex-direction:column;align-items:center;gap:2px}
.ring .ic{font-size:42px;line-height:1.1}
.ring .t{font-weight:900;font-size:16px}
.ring .s{font-size:12px;color:var(--dim);font-weight:700}
.ring.loading .ic{animation:pulse 1s infinite}
@keyframes pulse{50%{opacity:.4}}
.wave{display:flex;gap:4px;align-items:center;height:26px}
.wave i{width:4px;border-radius:2px;background:var(--ac);display:block;height:8px;animation:wave 1s infinite ease-in-out}
.wave i:nth-child(2){animation-delay:.1s}.wave i:nth-child(3){animation-delay:.2s}.wave i:nth-child(4){animation-delay:.3s}.wave i:nth-child(5){animation-delay:.4s}.wave i:nth-child(6){animation-delay:.5s}.wave i:nth-child(7){animation-delay:.6s}.wave i:nth-child(8){animation-delay:.7s}.wave i:nth-child(9){animation-delay:.8s}
@keyframes wave{0%,100%{height:6px}50%{height:26px}}
.wave.still i{animation:none;height:12px;opacity:.4}
.qtext{font-size:calc(19px * var(--fs));font-weight:800;line-height:1.55;padding:0 4px;max-height:36vh;overflow:auto}
.qtext.small{font-size:calc(15px * var(--fs));color:var(--dim)}
.answer{background:var(--acbg);border:1.5px solid var(--ac);border-radius:22px;padding:16px;width:100%;max-height:44vh;overflow:auto}
.answer .l{font-size:12px;color:var(--ac);font-weight:900;letter-spacing:.1em}
.answer .a{font-size:calc(28px * var(--fs));font-weight:900;margin:6px 0 8px;line-height:1.25}
.answer .e{font-size:calc(14px * var(--fs));line-height:1.6;color:var(--text);font-weight:500;text-align:left}
.judge{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
.judge button{border-radius:var(--radius-btn);padding:14px 4px 12px;display:flex;flex-direction:column;align-items:center;gap:3px;font-weight:900;font-size:15px;border:2px solid transparent;min-height:96px}
.judge .ic{font-size:30px;line-height:1}
.judge small{font-size:10px;font-weight:700;color:var(--dim)}
.judge .ok{background:rgba(52,211,153,.14);border-color:var(--ok);color:var(--ok)}
.judge .cl{background:rgba(251,191,36,.14);border-color:var(--close);color:var(--close)}
.judge .ag{background:rgba(129,140,248,.16);border-color:var(--again);color:var(--again)}
.judge[data-disabled="1"] button{opacity:.35}
.autobar{height:4px;border-radius:99px;background:rgba(255,255,255,.08);overflow:hidden;margin-top:8px}
.autobar>i{display:block;height:100%;background:var(--dim);width:0}
.ctrl{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 0 calc(14px + var(--safe-b))}
.ctrl .c{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:0 12px;min-height:48px;min-width:84px;font-weight:900;font-size:13px;color:var(--text);display:flex;align-items:center;justify-content:center;gap:6px}
.ctrl .c.on{color:var(--ac);border-color:var(--ac)}
.bigplay{width:72px;height:72px;border-radius:50%;background:var(--ac);color:#08101c;display:flex;align-items:center;justify-content:center;font-size:28px;box-shadow:0 12px 34px rgba(0,0,0,.4);flex-shrink:0}
.done{display:flex;flex-direction:column;gap:12px;align-items:stretch;text-align:center;padding-top:10px}
.done .big{font-size:56px}
.done h2{font-size:24px;font-weight:900}
.done .boxes{margin-top:0}

/* ---- review ---- */
.boxes{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-top:6px}
.box{border-radius:var(--radius-card);padding:12px 6px;text-align:center;border:1.5px solid var(--line);background:var(--card)}
.box .ic{font-size:22px}
.box .v{font-size:28px;font-weight:900;margin:2px 0}
.box .k{font-size:11px;font-weight:800;color:var(--dim)}
.box.ag{border-color:var(--again)} .box.ag .v{color:var(--again)}
.box.cl{border-color:var(--close)} .box.cl .v{color:var(--close)}
.box.ok{border-color:var(--ok)} .box.ok .v{color:var(--ok)}
.sect{display:flex;justify-content:space-between;align-items:baseline;margin-top:16px}
.sect .h{font-weight:900;font-size:15px}
.sect .more{font-size:12px;color:var(--ac);font-weight:800}
.heat{display:flex;flex-direction:column;gap:8px}
.heat .r{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:800;color:var(--dim)}
.heat .r span{width:5.5em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.heat .stack{flex:1;height:10px;border-radius:3px;background:rgba(255,255,255,.08);display:flex;overflow:hidden}
.heat .stack i{display:block;height:100%}
.qlist{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.q{display:flex;align-items:center;gap:10px;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:10px 12px;width:100%;text-align:left}
.q .dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;background:var(--again)}
.q .t{flex:1;font-size:13px;font-weight:700;line-height:1.4}
.q .u{font-size:10px;color:var(--dim);font-weight:800;background:rgba(255,255,255,.05);padding:3px 7px;border-radius:99px;flex-shrink:0;max-width:5em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.q .pl{color:var(--ac);font-size:16px}

/* ---- settings ---- */
.set{display:flex;flex-direction:column;gap:12px;padding-bottom:20px}
.set .card h3{font-size:14px;font-weight:900;margin-bottom:8px}
.seg{display:flex;gap:6px}
.seg button{flex:1;min-height:44px;border-radius:12px;background:rgba(255,255,255,.05);border:1px solid var(--line);font-weight:900;font-size:14px}
.seg button.on{background:var(--acbg);border-color:var(--ac);color:var(--ac)}
.set textarea{width:100%;min-height:64px;background:rgba(0,0,0,.25);color:var(--text);border:1px solid var(--line);border-radius:12px;padding:10px;font:inherit;font-size:12px}
.set p{font-size:12.5px;color:var(--dim);font-weight:700;line-height:1.6}
.toggle{display:flex;justify-content:space-between;align-items:center;min-height:44px;font-weight:800;font-size:14px}
.sw{width:52px;height:30px;border-radius:99px;background:rgba(255,255,255,.12);position:relative;flex-shrink:0}
.sw::after{content:'';position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;transition:left .15s}
.sw.on{background:var(--ac)} .sw.on::after{left:25px}

/* ---- listen ---- */
.listen .nowq{font-size:calc(17px * var(--fs));font-weight:800;line-height:1.55;text-align:center;padding:0 4px}
.listen .time{font-size:12px;color:var(--dim);font-weight:800}

@media (prefers-reduced-motion:reduce){.wave i,.ring.loading .ic{animation:none}}
@media (max-height:700px){.mascot{width:88px;height:88px;font-size:44px}.appname{font-size:28px}.ring{width:170px;height:170px}.ring .ic{font-size:34px}}
