.tp-char{white-space:pre;transition:color 80ms,background 80ms;display:inline}.tp-char.tp-correct{color:#16a34a}.tp-char.tp-wrong{color:#dc2626;background:#dc26261a;border-radius:2px}.tp-char.tp-current{background:#3b82f638;border-radius:3px;animation:1s step-end infinite tpBlink}@keyframes tpBlink{0%,to{background:#3b82f638}50%{background:#3b82f60a}}@keyframes tpShake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}@keyframes tpSlideUp{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes tpWarnPls{0%{box-shadow:0 0 #eab30873}70%{box-shadow:0 0 0 8px #eab30800}to{box-shadow:0 0 #eab30800}}@keyframes tpPulseRed{0%{box-shadow:0 0 #ef444466}70%{box-shadow:0 0 0 10px #ef444400}to{box-shadow:0 0 #ef444400}}.tp-slide-up{animation:.4s forwards tpSlideUp}.tp-warn-pulse{animation:1.8s infinite tpWarnPls}#tpInput.tp-invalid{animation:.32s tpShake;background:#ef44440d!important;border-color:#ef4444!important}#tpTimer.tp-danger{color:#dc2626!important;background:#ef444414!important;border-color:#fca5a5!important}#tpTextScroll::-webkit-scrollbar{width:4px}#tpTextScroll::-webkit-scrollbar-track{background:#f1f5f9;border-radius:9px}#tpTextScroll::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:9px}#tpTextScroll::-webkit-scrollbar-thumb:hover{background:#94a3b8}.tp-card-fail{border-top-color:#ef4444!important}.tp-rtl #tpInput,.tp-rtl #tpTextDisplay{text-align:right;direction:rtl}.tp-zh #tpTextDisplay{font-size:1.25rem!important;line-height:42px!important}.tp-zh #tpTextScroll{height:126px!important}.tp-req-badge{border:1.5px solid;border-radius:999px;align-items:center;gap:6px;padding:6px 14px;font-size:.8rem;font-weight:600;display:inline-flex}.tp-req-pass{color:#15803d;background:#f0fdf4;border-color:#86efac}.tp-req-fail{color:#b91c1c;background:#fef2f2;border-color:#fca5a5;animation:2s infinite tpPulseRed}#tpRetryBtnBig{color:#fff;cursor:pointer;background:linear-gradient(135deg,#ef4444,#dc2626);border:none;border-radius:999px;padding:12px 32px;font-size:1rem;font-weight:700;transition:transform .15s,box-shadow .15s;box-shadow:0 4px 14px #ef444466}#tpRetryBtnBig:hover{transform:translateY(-2px);box-shadow:0 6px 20px #ef444473}#tpRetryBtnBig:active{transform:scale(.97)}#tpFailBanner{background:linear-gradient(90deg,#fef2f2,#fff5f5);border:1.5px solid #fca5a5;border-radius:14px;align-items:flex-start;gap:12px;margin-bottom:20px;padding:16px 20px;display:none}#tpFailBanner.show{display:flex}
