:root{--bg:#101817;--bg-deep:#0b1110;--surface:#18221f;--surface-2:#1f2c29;--surface-3:#263531;--hairline:#2a3a36;--hairline-2:#38504a;--text:#ecf1ee;--text-2:#a6b8b2;--text-3:#869a92;--primary:#4ea088;--primary-press:#3d8470;--primary-soft:rgba(78,160,136,0.16);--accent:#d59a5e;--accent-soft:rgba(213,154,94,0.16);--correct:#5cb98e;--correct-bg:rgba(92,185,142,0.14);--correct-line:rgba(92,185,142,0.55);--wrong:#db8071;--wrong-bg:rgba(219,128,113,0.14);--wrong-line:rgba(219,128,113,0.55);--unanswered:#8c9b96;--unanswered-bg:rgba(140,155,150,0.1);--font:"Noto Sans TC",-apple-system,"PingFang TC",system-ui,sans-serif;--fs-display:44px;--fs-h1:26px;--fs-h2:20px;--fs-stem:19px;--lh-stem:1.75;--fs-option:16px;--lh-option:1.6;--fs-body:15px;--fs-aux:13px;--fs-micro:11px;--fs-timer:30px;--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:20px;--s6:24px;--s7:32px;--s8:40px;--r-sm:10px;--r-md:14px;--r-lg:20px;--r-xl:28px;--shadow-card:0 1px 2px rgba(0,0,0,0.25);--shadow-pop:0 8px 30px rgba(0,0,0,0.4);--hit:44px}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}body,html{margin:0;padding:0;height:100%}body{background:radial-gradient(120% 80% at 50% -10%,#0d1715 0,#07100e 60%);font-family:var(--font);min-height:100dvh;display:flex;align-items:center;justify-content:center}.device-shell{position:relative;width:100%;max-width:440px;height:100dvh;background:var(--bg);overflow:hidden}@media (min-width:480px){.device-shell{height:min(900px,calc(100dvh - 32px));border-radius:28px;border:1px solid var(--hairline);box-shadow:var(--shadow-pop)}}.app-root{font-family:var(--font);color:var(--text);background:var(--bg);height:100%;width:100%;font-size:var(--fs-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}.scroll{overflow-y:auto;overscroll-behavior:contain}.scroll::-webkit-scrollbar{width:6px}.scroll::-webkit-scrollbar-thumb{background:var(--hairline-2);border-radius:99px}.scroll::-webkit-scrollbar-track{background:transparent}.focusable:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.focusable{touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:transform .12s ease}.focusable:active{transform:scale(.97)}@media (hover:none){.focusable:active{transform:scale(.96)}}.tap{min-height:var(--hit);min-width:var(--hit)}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes popIn{0%{transform:scale(.6);opacity:0}60%{transform:scale(1.08)}to{transform:scale(1);opacity:1}}@keyframes pulseWarn{0%,to{opacity:1}50%{opacity:.55}}.fade-up{animation:fadeUp .32s cubic-bezier(.2,.7,.2,1) both}.no-motion,.no-motion *{animation:none!important;transition:none!important}