*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}body{font-family:Plus Jakarta Sans,-apple-system,PingFang SC,Microsoft YaHei,sans-serif;color:#0f172a;background:#f8fafc;line-height:1.6;overflow-x:clip;-webkit-text-size-adjust:100%}a{color:inherit;text-decoration:none}ol,ul{list-style:none}img{max-width:100%;height:auto;display:block}button{border:none;background:none;cursor:pointer;font-family:inherit}.page-main{min-height:100vh}.page-fade{animation:page-fade-in .3s ease}@keyframes page-fade-in{0%{opacity:0}to{opacity:1}}.ap-mask{position:fixed;inset:0;z-index:3000;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(15,23,42,.55);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.ap-dialog{position:relative;width:100%;max-width:560px;max-height:82vh;display:flex;flex-direction:column;background:#fff;border-radius:16px;box-shadow:0 24px 60px rgba(15,23,42,.25);overflow:hidden}.ap-dialog__hd{display:flex;align-items:center;justify-content:space-between;padding:18px 22px 0}.ap-dialog__title{padding:12px 22px 0;font-size:20px;font-weight:700;color:#0f172a}.ap-dialog__body{flex:1 1;min-height:0;padding:14px 22px;overflow-y:auto;font-size:14px;line-height:1.8;color:#334155}.ap-dialog__body img{max-width:100%;height:auto;border-radius:8px}.ap-dialog__ft{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end;padding:4px 22px 20px}.ap-btn{min-width:96px;padding:9px 22px;color:#fff;font-size:14px;background:linear-gradient(135deg,#2563eb,#4f46e5);border:none;border-radius:10px;cursor:pointer;transition:transform .2s,box-shadow .2s}.ap-btn:hover{transform:translateY(-1px);box-shadow:0 8px 18px rgba(37,99,235,.3)}.ap-btn--ghost{color:#334155;background:#f1f5f9;border:1px solid #e2e8f0}.ap-btn--ghost:hover{color:#0f172a;background:#e2e8f0;box-shadow:none}.ap-btn--mini{min-width:0;padding:6px 14px;font-size:12px;border-radius:8px}.ap-fixed__ft{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;padding:0 18px 16px}.ap-fixed{--ap-gap:24px;position:fixed;z-index:3000;display:flex;flex-direction:column;width:calc(100vw - 48px);max-width:380px;background:#fff;border-radius:14px;box-shadow:0 18px 45px rgba(15,23,42,.2);overflow:hidden}.ap-fixed--top-left{top:var(--ap-gap);left:var(--ap-gap)}.ap-fixed--top-center{top:var(--ap-gap);left:50%;transform:translateX(-50%)}.ap-fixed--top-right{top:var(--ap-gap);right:var(--ap-gap)}.ap-fixed--center{top:50%;left:50%;transform:translate(-50%,-50%)}.ap-fixed--bottom-left{bottom:var(--ap-gap);left:var(--ap-gap)}.ap-fixed--bottom-center{bottom:var(--ap-gap);left:50%;transform:translateX(-50%)}.ap-fixed--bottom-right{right:var(--ap-gap);bottom:var(--ap-gap)}.ap-fixed__hd{display:flex;align-items:center;justify-content:space-between;padding:14px 18px 0}.ap-fixed__title{padding:10px 18px 0;font-size:16px;font-weight:700;color:#0f172a}.ap-fixed__body{flex:1 1;min-height:0;padding:10px 18px 20px;max-height:var(--ap-body-max,280px);overflow-y:auto;font-size:13px;line-height:1.75;color:#475569}.ap-fixed__body img{max-width:100%;height:auto;border-radius:6px}.ap-badge{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:#2563eb}.ap-badge--mini{padding:3px 10px;color:#fff;font-size:12px;background:linear-gradient(135deg,#2563eb,#4f46e5);border-radius:999px}.ap-close{width:30px;height:30px;font-size:22px;line-height:1;color:#94a3b8;background:transparent;border:none;border-radius:8px;cursor:pointer;transition:background .2s,color .2s}.ap-close:hover{color:#0f172a;background:#f1f5f9}.ap-progress{position:absolute;left:0;bottom:0;width:100%;height:3px;transform-origin:left center;background:linear-gradient(90deg,#2563eb,#4f46e5);animation-name:ap-shrink;animation-timing-function:linear;animation-fill-mode:forwards}@keyframes ap-shrink{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.ap-fade-enter-active,.ap-fade-leave-active{transition:opacity .3s ease}.ap-fade-enter-active .ap-animate,.ap-fade-leave-active .ap-animate{transition:transform .3s ease,opacity .3s ease}.ap-fade-enter-from,.ap-fade-leave-to{opacity:0}.ap-fade-enter-from .ap-animate{transform:scale(.92) translateY(10px);opacity:0}.ap-fade-leave-to .ap-animate{transform:scale(.96);opacity:0}.ap-slide-enter-active,.ap-slide-leave-active{transition:opacity .3s ease}.ap-slide-enter-from,.ap-slide-leave-to{opacity:0}@media (max-width:576px){.ap-fixed{--ap-gap:12px;width:calc(100vw - 24px)}}