:root{
  --bg:#14161a; --card:#1e2128; --line:#2c313b;
  --fg:#e8eaed; --sub:#9aa3b2; --accent:#4f8cff; --ok:#3fb950; --warn:#e3b341; --err:#f85149;
  --pad: env(safe-area-inset-bottom, 0px);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;background:var(--bg);color:var(--fg);
  font-family:-apple-system,BlinkMacSystemFont,"Hiragino Sans","Noto Sans JP",sans-serif;
  -webkit-text-size-adjust:100%}
body{min-height:100dvh}
.hidden{display:none !important}
.screen{padding:20px 16px calc(20px + var(--pad));max-width:640px;margin:0 auto}

h1{font-size:20px;margin:8px 0 4px}
.lead{font-size:16px;color:var(--accent);margin:0 0 20px;font-weight:600}
.note{color:var(--sub);line-height:1.7;font-size:14px}
.tiny{color:var(--sub);font-size:12px;margin-top:16px;line-height:1.6}
.warn{background:#3a2a12;border:1px solid var(--warn);color:#f0d089;
  padding:12px;border-radius:8px;font-size:14px;line-height:1.6;margin:16px 0}

button{font-family:inherit;font-size:15px;border-radius:10px;border:1px solid var(--line);
  background:var(--card);color:var(--fg);padding:12px 16px;cursor:pointer;transition:opacity .15s}
button:active{opacity:.7}
button:disabled{opacity:.35;cursor:default}
.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.big{width:100%;padding:16px;font-size:17px;margin-top:24px}
.ghost{background:transparent}
.small{padding:8px 12px;font-size:13px}

header{position:sticky;top:0;background:var(--bg);padding:12px 0 8px;z-index:5}
.bar{height:4px;background:var(--line);border-radius:2px;overflow:hidden}
#barFill{height:100%;width:0%;background:var(--ok);transition:width .3s}
.status{display:flex;justify-content:space-between;align-items:center;margin-top:8px}
#progressText{font-size:13px;color:var(--sub);font-variant-numeric:tabular-nums}

#card{background:var(--card);border:1px solid var(--line);border-radius:14px;
  padding:24px 20px;margin:12px 0;min-height:180px;display:flex;flex-direction:column;justify-content:center}
.scriptHead{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.scriptId{font-size:11px;color:var(--sub);letter-spacing:.05em}
.badge{font-size:10px;background:#16301c;border:1px solid var(--ok);color:#7ee094;padding:2px 8px;border-radius:10px;white-space:nowrap}
.scriptText{font-size:26px;line-height:1.6;margin:0 0 14px;font-weight:600;word-break:auto-phrase}
.scriptKana{font-size:14px;color:var(--sub);line-height:1.6;margin:0;word-break:break-all}

.meterWrap{height:8px;background:var(--line);border-radius:4px;overflow:hidden;margin:4px 0 8px}
#meterFill{height:100%;width:0%;background:var(--ok);transition:width .05s linear}
#meterFill.loud{background:var(--err)}
.hint{min-height:20px;font-size:13px;color:var(--sub);text-align:center;margin-bottom:10px;line-height:1.5}
.hint.bad{color:var(--warn)}

.controls{display:flex;gap:10px;align-items:center}
.controls button{flex:1}
.controls .rec{flex:2;padding:18px;font-size:17px}
.rec.recording{background:var(--err);border-color:var(--err)}
.controls.sub{margin-top:10px}
.controls.sub button{flex:1}

.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(24px + var(--pad));
  background:#000d;border:1px solid var(--line);padding:10px 16px;border-radius:20px;
  font-size:13px;max-width:90%;text-align:center}
.toast.err{border-color:var(--err);color:#ffb3ae}

.listHeader{display:flex;justify-content:space-between;align-items:center;gap:12px}
#listSummary{font-size:13px;color:var(--sub)}
.listBody{display:grid;grid-template-columns:repeat(auto-fill,minmax(62px,1fr));gap:6px;margin-top:14px}
.cell{background:var(--card);border:1px solid var(--line);border-radius:6px;
  padding:8px 2px;text-align:center;font-size:11px;color:var(--sub);cursor:pointer;
  font-variant-numeric:tabular-nums;overflow:hidden;white-space:nowrap}
.cell.done{background:#16301c;border-color:var(--ok);color:#7ee094}
.cell.current{outline:2px solid var(--accent)}
.groupLabel{grid-column:1/-1;font-size:12px;color:var(--sub);margin-top:14px;padding-bottom:4px;
  border-bottom:1px solid var(--line)}
