diff --git a/.gitignore b/.gitignore index cd06b22..b72fca8 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,4 @@ tests/fixtures/ # SpecStory explanation file .specstory/.what-is-this.md +AGENTS.md diff --git a/assets/style.css b/assets/style.css index 697a34b..a8d5c1d 100644 --- a/assets/style.css +++ b/assets/style.css @@ -950,12 +950,71 @@ body .content.expanded { .site-card .icon-placeholder, .site-card .icon-fallback { - display: inline-flex; - align-items: center; - justify-content: center; + display: inline-block; width: 1.8rem; height: 1.8rem; + margin-bottom: 1rem; + border-radius: 4px; flex-shrink: 0; + vertical-align: middle; + text-align: center; + line-height: 1.8rem; + font-size: 1.8rem; + transition: transform 0.3s ease, box-shadow 0.3s ease; +} + +/* 确保图标容器在加载过程中保持固定尺寸 */ +.site-card .icon-container { + display: inline-block; + width: 1.8rem; + height: 1.8rem; + margin-bottom: 1rem; + position: relative; + vertical-align: middle; +} + +.site-card .icon-container .favicon-icon, +.site-card .icon-container .icon-placeholder, +.site-card .icon-container .icon-fallback { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + margin-bottom: 0; +} + +/* 优化图标切换动画 */ +.site-card .icon-container .favicon-icon { + opacity: 0; + transition: opacity 0.3s ease; +} + +.site-card .icon-container .favicon-icon.loaded { + opacity: 1; +} + +.site-card .icon-container .favicon-icon.error { + display: none; +} + +.site-card .icon-container .icon-placeholder { + opacity: 1; + transition: opacity 0.3s ease; +} + +.site-card .icon-container .icon-placeholder.hidden { + opacity: 0; + pointer-events: none; +} + +.site-card .icon-container .icon-fallback { + opacity: 0; + transition: opacity 0.3s ease; +} + +.site-card .icon-container .icon-fallback.visible { + opacity: 1; } .site-card:hover i { diff --git a/templates/components/site-card.hbs b/templates/components/site-card.hbs index e6a0bd7..74f760b 100644 --- a/templates/components/site-card.hbs +++ b/templates/components/site-card.hbs @@ -8,17 +8,18 @@ data-description="{{#if description}}{{description}}{{else}}{{url}}{{/if}}"> {{#ifEquals @root.icons.mode "favicon"}} {{#ifHttpUrl url}} - - {{name}} favicon - +
+ + {{name}} favicon + +
{{else}} {{/ifHttpUrl}}