:root{--p:#89BCEB;--l:#D6EAFB;--bg:#F5FAFF;--card:#fff;--ink:#253B59;--mut:#7187A0;--bd:#DCEAF6;--hv:#E8F3FF}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font-family:'Outfit','Noto Sans SC',sans-serif;
background-image:radial-gradient(1200px 500px at 10% -10%,#D6EAFB 0,transparent 60%),radial-gradient(900px 500px at 100% 0,#e6f1fd 0,transparent 55%)}
.disp{font-family:'Fraunces',serif}
.han{font-family:'Noto Sans SC',sans-serif}
.hanserif{font-family:'Noto Serif SC',serif}
.card{background:#fff;border:1px solid var(--bd);border-radius:20px;box-shadow:0 4px 18px rgba(137,188,235,.12);transition:transform .2s,box-shadow .2s}
.card:hover{transform:translateY(-2px);box-shadow:0 10px 28px rgba(137,188,235,.22)}
.btn{background:var(--p);color:#fff;border-radius:999px;padding:.55rem 1.1rem;font-weight:600;transition:all .15s}
.btn:hover{background:#6fa9df}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn2{background:#fff;color:var(--ink);border:1px solid var(--bd);border-radius:999px;padding:.5rem 1rem;font-weight:500;transition:all .15s}
.btn2:hover{background:var(--hv)}
.inp{width:100%;background:#fff;border:1px solid var(--bd);border-radius:14px;padding:.7rem 1rem;outline:none;color:var(--ink)}
.inp:focus{border-color:var(--p);box-shadow:0 0 0 4px var(--l)}
.mut{color:var(--mut)}
.fade{animation:fade .45s ease both}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.shim{background:linear-gradient(90deg,#eef6ff 25%,#dcebfa 50%,#eef6ff 75%);background-size:200% 100%;animation:sh 1.2s infinite;border-radius:8px}
@keyframes sh{to{background-position:-200% 0}}
.tok{cursor:pointer;border-radius:6px;padding:0 1px;transition:background .12s}
.tok:hover{background:var(--hv)}
.tok.known{border-bottom:2px solid #b9d7f3}
.tok.sel{background:var(--l)}
ruby rt{font-family:'Outfit',sans-serif;font-size:.42em;color:var(--mut);letter-spacing:0}
.float{animation:fl 6s ease-in-out infinite}
@keyframes fl{50%{transform:translateY(-6px)}}
.scrollx{overflow-x:auto;scrollbar-width:none}