:root{--c-blue: #5B8DF0;--c-blue-deep: #3D6FE0;--c-purple: #9B8AFB;--c-green: #4CC38A;--c-orange: #F5A623;--c-red: #FA7878;--c-ink: #2E3340;--c-ink-2: #8A95A8;--c-ink-3: #AEB4C0;--c-bg: #F4F6F9;--c-surface: #FFFFFF;--c-line: #E6E9EF;--c-blue-soft: #EAF1FF;--gradient-primary: linear-gradient(135deg, #5B8DF0, #9B8AFB);--font-family-base: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", -apple-system, sans-serif;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--sp-8: 32px;--page-pad-x: 16px;--section-gap: 24px;--fs-11: 11px;--fs-13: 13px;--fs-14: 14px;--fs-15: 15px;--fs-16: 16px;--fs-20: 20px;--fs-22: 22px;--fs-26: 26px;--fs-32: 32px;--fs-40: 40px;--fw-regular: 400;--fw-medium: 500;--fw-semibold: 600;--fw-bold: 700;--fw-extrabold: 800;--lh-tight: 1.25;--lh-body: 1.5;--radius-card: 18px;--radius-card-lg: 20px;--radius-btn: 999px;--radius-pill: 999px;--radius-avatar: 999px;--radius-sm: 10px;--radius-tag: 999px;--shadow-card: 0 8px 24px rgba(44, 51, 56, .08);--shadow-card-soft: 0 6px 20px rgba(44, 51, 56, .06);--shadow-btn-primary: 0 6px 16px rgba(91, 141, 240, .3);--shadow-modal: 0 12px 32px rgba(44, 51, 56, .18);--shadow-tabbar: 0 -4px 16px rgba(44, 51, 56, .06);--shadow-sticky: 0 4px 12px rgba(44, 51, 56, .1);--motion-fast: .15s;--motion-base: .2s;--motion-slow: .3s;--ease-out: cubic-bezier(.2, 0, 0, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--z-tabbar: 100;--z-sticky: 110;--z-modal-mask: 1000;--z-modal: 1010;--z-toast: 1100;--z-float-points: 1200;--focus-ring: 0 0 0 3px rgba(91, 141, 240, .35);--color-primary: var(--c-blue);--color-primary-deep: var(--c-blue-deep);--color-success: var(--c-green);--color-warning: var(--c-orange);--color-danger: var(--c-red);--text-primary: var(--c-ink);--text-secondary: var(--c-ink-2);--text-tertiary: var(--c-ink-3);--text-on-brand: #FFFFFF;--text-on-success: #FFFFFF;--text-on-warning: #FFFFFF;--bg-page: var(--c-bg);--bg-surface: var(--c-surface);--bg-brand-soft: var(--c-blue-soft);--bg-input: var(--c-surface);--bg-tag: var(--c-blue-soft);--border-line: var(--c-line);--btn-primary-bg: var(--gradient-primary);--btn-primary-text: var(--text-on-brand);--btn-primary-hover: rgba(91, 141, 240, .92);--btn-primary-active: var(--c-blue-deep);--btn-primary-disabled-bg: var(--c-ink-3);--btn-primary-disabled-text: rgba(255, 255, 255, .85);--btn-primary-height: 48px;--btn-primary-radius: var(--radius-btn);--btn-primary-shadow: var(--shadow-btn-primary);--btn-secondary-bg: var(--c-blue-soft);--btn-secondary-text: var(--c-blue);--btn-secondary-active-bg: #D9E6FF;--btn-secondary-disabled-bg: #F1F3F7;--btn-secondary-disabled-text: var(--c-ink-3);--btn-secondary-height: 48px;--btn-secondary-radius: var(--radius-btn);--btn-ghost-bg: var(--c-surface);--btn-ghost-text: var(--c-ink-2);--btn-ghost-border: var(--c-line);--btn-ghost-active-bg: #F1F3F7;--input-bg: var(--bg-input);--input-border: var(--c-line);--input-radius: var(--radius-sm);--input-height: 48px;--input-text: var(--text-primary);--input-placeholder: var(--text-tertiary);--input-focus-border: var(--c-blue);--input-error-border: var(--c-red);--input-disabled-bg: #F1F3F7;--input-disabled-text: var(--text-tertiary);--card-bg: var(--bg-surface);--card-radius: var(--radius-card);--card-padding: var(--sp-4);--card-shadow: var(--shadow-card);--card-border: var(--border-line);--modal-mask-bg: rgba(44, 51, 56, .5);--modal-bg: var(--bg-surface);--modal-radius: var(--radius-card-lg);--modal-padding: var(--sp-6);--modal-shadow: var(--shadow-modal);--tabbar-bg: var(--bg-surface);--tabbar-border: var(--border-line);--tabbar-height: 56px;--tabbar-active-color: var(--c-blue);--tabbar-inactive-color: var(--c-ink-3);--switch-on-bg: var(--c-green);--switch-off-bg: var(--c-line);--switch-track-width: 44px;--switch-track-height: 26px;--switch-knob-size: 22px;--switch-knob-bg: #FFFFFF;--avatar-default-bg: var(--c-blue-soft);--avatar-default-icon: var(--c-blue);--avatar-radius: var(--radius-avatar);--toast-bg: rgba(46, 51, 64, .85);--toast-text: #FFFFFF;--toast-radius: var(--radius-pill);--subject-chinese: #5B8DF0;--subject-chinese-soft: #EAF1FF;--subject-math: #F5A623;--subject-math-soft: #FFF4E0;--subject-english: #4CC38A;--subject-english-soft: #E8F9F0;--subject-science: #9B8AFB;--subject-science-soft: #F2EFFF;--subject-sport: #FA7878;--subject-sport-soft: #FEEBEB;--heatmap-strong: #4CC38A;--heatmap-mid: #9BD9BE;--heatmap-weak: #D8F0E2;--heatmap-none: #EEF1F4;--streak-badge-bg: rgba(255, 255, 255, .2);--streak-badge-text: #FFFFFF;--streak-badge-icon: #FFD666;--points-float-text: var(--c-orange);--points-float-bg: rgba(245, 166, 35, .14);--progress-track: var(--c-line);--progress-fill: var(--c-blue);--progress-fill-success: var(--c-green);--progress-fill-warning: var(--c-orange)}*{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-family-base);font-size:var(--fs-16);line-height:var(--lh-body);color:var(--text-primary);background:var(--bg-page);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:focus-visible{outline:none;box-shadow:var(--focus-ring)}button{font-family:inherit;cursor:pointer;border:none;background:none}input{font-family:inherit}.text-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@keyframes float-points{0%{transform:translate(-50%) scale(.7);opacity:0}25%{transform:translate(-50%,-12px) scale(1.12);opacity:1}70%{transform:translate(-50%,-40px) scale(1.05);opacity:1}to{transform:translate(-50%,-72px) scale(1);opacity:0}}.animate-float-points{animation:float-points .9s var(--ease-out) forwards;position:fixed;z-index:var(--z-float-points);pointer-events:none}@keyframes pop-in{0%{transform:scale(.86);opacity:0}60%{transform:scale(1.04)}to{transform:scale(1);opacity:1}}.animate-pop-in{animation:pop-in var(--motion-slow) var(--ease-out)}@keyframes mask-fade{0%{opacity:0}to{opacity:1}}.animate-mask{animation:mask-fade var(--motion-fast) var(--ease-out)}@keyframes number-bounce{0%{transform:scale(1)}40%{transform:scale(1.25)}to{transform:scale(1)}}.animate-number-bounce{animation:number-bounce var(--motion-base) var(--ease-out)}@keyframes card-enter{0%{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}.animate-card-enter{animation:card-enter var(--motion-base) var(--ease-out)}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.page{min-height:100vh;min-height:100dvh;padding-bottom:calc(var(--tabbar-height) + env(safe-area-inset-bottom) + var(--sp-6));background:var(--bg-page)}.page--no-tab{padding-bottom:calc(env(safe-area-inset-bottom) + var(--sp-6))}.hero-gradient{background:var(--gradient-primary);border-bottom-left-radius:var(--radius-card-lg);border-bottom-right-radius:var(--radius-card-lg)}.app-card{background:var(--card-bg);border-radius:var(--card-radius);padding:var(--card-padding);box-shadow:var(--card-shadow)}.app-card--soft{box-shadow:var(--shadow-card-soft)}.app-card--plain{box-shadow:none;border:1px solid var(--border-line)}.sticky-bar{position:sticky;bottom:0;z-index:var(--z-sticky);padding:var(--sp-3) var(--page-pad-x) calc(var(--sp-3) + env(safe-area-inset-bottom));background:var(--bg-surface);border-top:1px solid var(--border-line);box-shadow:var(--shadow-sticky)}.skeleton{background:var(--c-bg);border-radius:var(--radius-sm);animation:skeleton-shimmer 1.1s var(--ease-in-out) infinite}@keyframes skeleton-shimmer{0%{opacity:1}50%{opacity:.55}to{opacity:1}}.text-strike{text-decoration:line-through;text-decoration-thickness:1.5px;text-decoration-color:var(--text-tertiary)}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-3);padding:var(--sp-8) var(--sp-5);color:var(--text-secondary)}.card-enter{opacity:0;animation:card-enter var(--motion-base) var(--ease-out) forwards}.app-toast{position:fixed;left:50%;bottom:120px;z-index:var(--z-toast);max-width:80vw;padding:var(--sp-3) var(--sp-5);background:var(--toast-bg);color:var(--toast-text);font-size:var(--fs-15);line-height:var(--lh-tight);text-align:center;border-radius:var(--toast-radius);box-shadow:var(--shadow-modal);transform:translate(-50%);animation:toast-in var(--motion-fast) var(--ease-out)}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%)}}.app-toast--hidden{opacity:0;transition:opacity var(--motion-fast) var(--ease-out)}.row-divider{border-bottom:1px solid var(--border-line)}.pressable{transition:transform var(--motion-fast) var(--ease-out)}.pressable:active{transform:scale(.97)}
