/** * AKSRT Enhancements — 全局 UI 增强 * * 包含:骨架屏、悬停动效、暗色过渡、滚动感知 * 所有选择器使用 aksrt- 前缀避免冲突 */ .aksrt-modal-auth__error.is-success { background: rgba(16, 185, 129, 0.08); border-color: rgba(16, 185, 129, 0.22); color: #047857; } .aksrt-modal-auth__checkbox { display: flex; align-items: flex-start; gap: 8px; font-size: 13px; color: var(--muted-color, #777); } .aksrt-modal-auth__hint { margin: -4px 0 0; font-size: 13px; color: var(--muted-color, #777); line-height: 1.6; } @keyframes aksrt-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* ============================================================ * 1. 骨架屏加载动画 * ============================================================ */ .aksrt-skeleton { background: linear-gradient( 90deg, rgba(121, 121, 121, 0.08) 25%, rgba(121, 121, 121, 0.15) 37%, rgba(121, 121, 121, 0.08) 63% ); background-size: 400% 100%; animation: aksrt-skeleton-shimmer 1.5s ease infinite; border-radius: 4px; } .aksrt-skeleton--image { height: 0; padding-bottom: 66.67%; /* 3:2 aspect ratio */ } .aksrt-skeleton--avatar { width: 40px; height: 40px; border-radius: 50%; } .aksrt-skeleton--title { height: 22px; width: 80%; } .aksrt-skeleton--text { height: 16px; width: 100%; } .aksrt-skeleton--text-short { height: 16px; width: 60%; } .aksrt-skeleton--button { height: 36px; width: 100px; border-radius: 8px; } @keyframes aksrt-skeleton-shimmer { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } } /* 骨架屏组合:文章卡片骨架 */ .aksrt-skeleton-card { background: var(--surface-1, #fff); border: 1px solid var(--color-line); border-radius: 12px; overflow: hidden; padding: 0; } .aksrt-skeleton-card .aksrt-skeleton--image { border-radius: 0; } .aksrt-skeleton-card__body { padding: 16px; display: flex; flex-direction: column; gap: 10px; } /* ============================================================ * 2. 悬停交互动效 * ============================================================ */ /* 卡片放大 */ .aksrt-hover-zoom { transition: transform 0.3s ease; } .aksrt-hover-zoom:hover { transform: scale(1.02); } /* 卡片轻微放大 */ .aksrt-hover-zoom-sm { transition: transform 0.3s ease; } .aksrt-hover-zoom-sm:hover { transform: scale(1.02); } /* 悬停显示内容 */ .aksrt-hover-show { position: relative; } .aksrt-hover-show__content { position: absolute; opacity: 0; visibility: hidden; transform: translateY(6px); transition: opacity 0.3s, transform 0.3s, visibility 0.3s; z-index: 10; } .aksrt-hover-show:hover .aksrt-hover-show__content { opacity: 1; visibility: visible; transform: translateY(0); } /* 关闭按钮旋转 */ .aksrt-ic-close { transition: transform 0.3s; cursor: pointer; } .aksrt-ic-close:hover { transform: rotate(270deg); } /* 图片悬停缩放(缩略图容器) */ .aksrt-hover-zoom-img img { transition: transform 0.3s ease; } .aksrt-hover-zoom-img:hover img { transform: scale(1.02); } .aksrt-hover-zoom-img-sm img { transition: transform 0.3s ease; } .aksrt-hover-zoom-img-sm:hover img { transform: scale(1.02); } /* 按钮悬停上浮 */ .aksrt-hover-lift { transition: transform 0.2s ease, box-shadow 0.2s ease; } .aksrt-hover-lift:hover { transform: none; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } /* ============================================================ * 3. 暗色模式过渡 (View Transitions API) * ============================================================ */ ::view-transition-old(root), ::view-transition-new(root) { animation: none; mix-blend-mode: normal; } .dark::view-transition-old(root), body.dark-theme::view-transition-old(root) { z-index: 1; } .dark::view-transition-new(root), body.dark-theme::view-transition-new(root) { z-index: 2147483646; } ::view-transition-old(root) { z-index: 2147483646; } ::view-transition-new(root) { z-index: 1; } /* backdrop-filter 不支持时的降级 */ @supports not ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))) { :root { --aksrt-blur-bg: #ffffff; } .dark { --aksrt-blur-bg: var(--surface-1); } } /* ============================================================ * 4. 滚动方向感知 * ============================================================ */ /* 向下滚动时隐藏导航栏 */ body.aksrt-scroll-down .site-nav.nav-scroll-hide { transform: translateY(-100%); transition: transform 0.3s ease; } body.aksrt-scroll-up .site-nav.nav-scroll-hide { transform: translateY(0); transition: transform 0.3s ease; } /* 滚动时隐藏浮动按钮 */ body.aksrt-scrolling .aksrt-floating-right.scrolling-hide { opacity: 0; pointer-events: none; transition: opacity 0.2s; } /* body-scroll 状态类 */ body.aksrt-body-scroll .aksrt-show-on-scroll { opacity: 1; visibility: visible; } .aksrt-show-on-scroll { opacity: 0; visibility: hidden; transition: opacity 0.3s, visibility 0.3s; } /* ============================================================ * 5. 图片灯箱 * ============================================================ */ .aksrt-lightbox { position: fixed; inset: 0; z-index: 9999; background: rgba(0, 0, 0, 0.85); display: flex; align-items: center; justify-content: center; opacity: 0; visibility: hidden; transition: opacity 0.3s, visibility 0.3s; cursor: zoom-out; } .aksrt-lightbox.is-open { opacity: 1; visibility: visible; } .aksrt-lightbox__img { max-width: 90vw; max-height: 85vh; object-fit: contain; border-radius: 4px; transform: scale(0.9); transition: transform 0.3s; cursor: default; } .aksrt-lightbox.is-open .aksrt-lightbox__img { transform: scale(1); } .aksrt-lightbox__close { position: absolute; top: 16px; right: 16px; width: 36px; height: 36px; border: none; border-radius: 50%; background: rgba(255, 255, 255, 0.15); color: #fff; font-size: 20px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: background 0.2s; } .aksrt-lightbox__close:hover { background: rgba(255, 255, 255, 0.3); } .aksrt-lightbox__caption { position: absolute; bottom: 16px; left: 50%; transform: translateX(-50%); color: rgba(255, 255, 255, 0.8); font-size: 14px; text-align: center; max-width: 80%; } .aksrt-lightbox__nav { position: absolute; top: 50%; transform: translateY(-50%); width: 48px; height: 48px; border: none; border-radius: 50%; background: rgba(255, 255, 255, 0.1); color: #fff; font-size: 24px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: background 0.2s; } .aksrt-lightbox__nav:hover { background: rgba(255, 255, 255, 0.25); } .aksrt-lightbox__nav--prev { left: 16px; } .aksrt-lightbox__nav--next { right: 16px; } .aksrt-lightbox__counter { position: absolute; top: 16px; left: 16px; color: rgba(255, 255, 255, 0.7); font-size: 14px; } .aksrt-lightbox__download { position: absolute; top: 16px; right: 64px; width: 40px; height: 40px; border: none; border-radius: 50%; background: rgba(255, 255, 255, 0.15); color: #fff; font-size: 18px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: background 0.2s; } .aksrt-lightbox__download:hover { background: rgba(255, 255, 255, 0.3); } /* 可缩放图片的光标 */ .aksrt-cursor-zoom-in { cursor: zoom-in; }