/* TOPIK speaking practice (js/speaking.js, #/speaking). Mobile first; nothing may be wider than the screen at 375px. */
.sp-types { display: grid; gap: 10px; }
@media (min-width: 640px) { .sp-types { grid-template-columns: 1fr 1fr; } }
.sp-type { display: flex; flex-direction: column; gap: 4px; min-width: 0; color: var(--fg); text-decoration: none; }
.sp-type:hover { border-color: var(--accent); }
.sp-type b { overflow-wrap: anywhere; }
.sp-ko { font-size: .85rem; color: var(--muted); }
.small { font-size: .8rem; }
.badge.soft { background: transparent; border: 1px solid var(--line); color: var(--muted); }

.sp-card { min-width: 0; }
.sp-card .instr { margin-top: 10px; }
.sp-prompt { font-size: 1.08rem; font-weight: 700; line-height: 1.7; margin: 12px 0 4px; word-break: keep-all; overflow-wrap: anywhere; }
.sp-scene { display: flex; flex-direction: column; align-items: center; gap: 6px; margin: 12px 0; padding: 14px; border: 1px dashed var(--line); border-radius: 14px; text-align: center; }
.sp-emoji { font-size: 2.2rem; line-height: 1.2; letter-spacing: 4px; }
.sp-cap { font-size: .88rem; color: var(--muted); line-height: 1.45; word-break: keep-all; overflow-wrap: anywhere; }
.sp-frames { list-style: none; display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 12px 0; padding: 0; }
.sp-frames li { position: relative; display: flex; flex-direction: column; align-items: center; gap: 4px; min-width: 0; padding: 22px 8px 10px; border: 1px dashed var(--line); border-radius: 12px; text-align: center; }
.sp-frames .sp-emoji { font-size: 1.8rem; letter-spacing: 2px; }
.frame-n { position: absolute; top: 6px; left: 8px; width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; background: var(--accent-soft); color: var(--accent); font-weight: 800; font-size: .8rem; }
.sp-dialogue { padding: 10px 12px; border-radius: 12px; background: var(--accent-soft); }
.sp-dialogue p { word-break: keep-all; overflow-wrap: anywhere; }
.sp-chart { margin: 12px 0; overflow: hidden; }
.sp-chart svg { display: block; width: 100%; height: auto; max-width: 520px; margin: 0 auto; }
.sp-chart svg text { font: 16px system-ui, sans-serif; fill: currentColor; }
.sp-guides { margin-top: 8px; padding: 10px 12px; border-left: 3px solid var(--accent); background: var(--accent-soft); border-radius: 0 10px 10px 0; }
.sp-guides ul { margin: 4px 0 0; padding-left: 20px; }

.sp-run { margin-top: 12px; }
.sp-phase { font-size: 1.05rem; }
.sp-track { flex: 1 1 120px; max-width: 260px; }
.sp-track i { background: var(--accent); transition: width .2s linear; }
.sp-track.ans i { background: var(--ok); }
.sp-timer { font-size: 1.25rem; }
.sp-controls { margin-top: 10px; }
.sp-controls .btn { flex: 1 1 auto; }
.textbox { display: block; width: 100%; margin-top: 8px; padding: 10px 12px; font: inherit; line-height: 1.7; color: var(--fg); background: var(--card); border: 1px solid var(--line); border-radius: 12px; resize: vertical; }
.sp-memo summary { cursor: pointer; font-weight: 700; color: var(--muted); }
.voice-live { min-height: 1.6em; margin: 10px 0 0; font-size: 1.05rem; line-height: 1.7; overflow-wrap: anywhere; }
.voice-live:empty { display: none; }
.set-label { display: block; margin-top: 12px; font-weight: 700; font-size: .9rem; }
.sp-result .sp-score { font-size: 1.05rem; }
.big-inline { font-size: 1.8rem; font-weight: 900; color: var(--accent); }
.chip.ok { border-color: var(--ok); color: var(--ok); }
.chip.miss { color: var(--muted); background: var(--line); border-color: var(--line); }
.sp-keys .chip { font-size: .85rem; padding: 4px 10px; }
.sp-model-wrap { margin-top: 12px; }
.sp-tip { margin: 0 0 10px; padding: 10px 12px; border-radius: 12px; background: var(--accent-soft); }
.sp-model { font-size: 1.02rem; line-height: 1.8; word-break: keep-all; overflow-wrap: anywhere; }
.qhead .back { margin: 0; }
