* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
body {
    margin: 0; background-color: var(--bg-page); color: var(--text-main);
    font-family: var(--font-sans); line-height: 1.7; -webkit-font-smoothing: antialiased;
}
/* 优雅的入场动画类 */
.fade-up {
    opacity: 0; transform: translateY(30px);
    transition: opacity 0.8s ease-out, transform 0.8s ease-out;
}
.fade-up.visible { opacity: 1; transform: translateY(0); }
/* =========================================
   公式引擎
   ========================================= */
.math { font-family: var(--font-serif); font-size: 1.1em; font-style: italic; font-weight: 600; padding: 0 4px; }
.math sup { font-size: 0.7em; vertical-align: super; }
.frac { display: inline-flex; flex-direction: column; align-items: center; vertical-align: middle; margin: 0 0.15em; font-size: 0.85em; line-height: 1.2; }
.frac .top { border-bottom: 2px solid currentColor; padding: 0 0.1em; }
.frac .bot { padding: 0 0.1em; }
