From 6dd567a07e7eab408e870135885dcd158cda95cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E5=AE=87=E5=AE=81?= Date: Thu, 22 Oct 2026 15:30:49 +0700 Subject: [PATCH] =?UTF-8?q?Ui=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/web/application.go | 23 - app/router/gin.go | 1 - app/service/applistser/list.go | 37 -- app/service/applistser/types.go | 38 -- app/service/applistser/view.go | 83 --- app/service/seoser/indexable.go | 2 +- app/service/seoser/jsonld.go | 21 +- app/service/translationser/view.go | 9 +- app/service/translationser/view_test.go | 1 - app/static/css/application.css | 545 ------------------ app/static/images/au_flyy.svg | 17 - .../figma-dialogs/download-logo-mobile.svg | 2 +- .../images/figma-dialogs/download-logo-pc.svg | 2 +- .../images/figma-home/footer-logo-desktop.png | Bin 6347 -> 15239 bytes app/static/images/figma-nav/benefits.svg | 5 - app/static/images/logo.png | Bin 6404 -> 15138 bytes app/static/js/pages/application.js | 160 ----- app/templates/base/downloadAppDialog.html | 4 +- app/templates/base/footer.html | 4 +- app/templates/base/header.html | 3 +- app/templates/page/aboutUs.html | 8 - app/templates/page/application.html | 131 ----- app/templates/page/homeRoad.html | 2 +- app/templates/page/nav.html | 10 +- app/templates/page/richtext.html | 8 - 25 files changed, 16 insertions(+), 1100 deletions(-) delete mode 100644 app/api/web/application.go delete mode 100644 app/service/applistser/list.go delete mode 100644 app/service/applistser/types.go delete mode 100644 app/service/applistser/view.go delete mode 100644 app/static/css/application.css delete mode 100644 app/static/images/au_flyy.svg delete mode 100644 app/static/images/figma-nav/benefits.svg delete mode 100644 app/static/js/pages/application.js delete mode 100644 app/templates/page/application.html diff --git a/app/api/web/application.go b/app/api/web/application.go deleted file mode 100644 index c5203ac..0000000 --- a/app/api/web/application.go +++ /dev/null @@ -1,23 +0,0 @@ -package web - -import ( - "videoweb/app/service/applistser" - - "github.com/gin-gonic/gin" -) - -// Application 福利应用页 SSR:拉取 /api/app/applist/list。 -func Application(c *gin.Context) { - raw := applistser.FetchListOrEmpty(c, 0) - vm := applistser.BuildPageVM(raw) - data := gin.H{ - "title": "福利应用", - "pageName": "应用推荐", - "navActive": "application", - "categories": vm.Categories, - } - if len(vm.Categories) == 0 { - setNoIndex(data, true) - } - HTMLOK(c, "application.html", data) -} diff --git a/app/router/gin.go b/app/router/gin.go index bf4055c..942aa6b 100644 --- a/app/router/gin.go +++ b/app/router/gin.go @@ -206,7 +206,6 @@ func registerRoutes(r *gin.Engine) { }) }) - r.GET("/application/", web.Application) r.GET("/home-road/", web.HomeRoad) r.GET("/detail/:slug/", web.Detail) diff --git a/app/service/applistser/list.go b/app/service/applistser/list.go deleted file mode 100644 index 213a19c..0000000 --- a/app/service/applistser/list.go +++ /dev/null @@ -1,37 +0,0 @@ -package applistser - -import ( - "fmt" - "videoweb/app/service/upstream" - "videoweb/pub/common/log" - - "github.com/gin-gonic/gin" -) - -const listPath = "/api/app/applist/list" - -// FetchList 拉取应用分类列表。categoryId=0 表示默认。 -func FetchList(c *gin.Context, categoryID int64) (*AppListResp, error) { - path := fmt.Sprintf("%s?categoryId=%d", listPath, categoryID) - var env APIEnvelope[AppListResp] - if err := upstream.GetPublicJSON(c, path, &env); err != nil { - return nil, err - } - if env.Code != 200 { - return nil, fmt.Errorf("applist code=%d msg=%s", env.Code, env.Msg) - } - return &env.Data, nil -} - -// FetchListOrEmpty 失败时返回空结构,保证 SSR 可渲染。 -func FetchListOrEmpty(c *gin.Context, categoryID int64) *AppListResp { - data, err := FetchList(c, categoryID) - if err != nil { - log.Error("fetch applist failed", log.E(err)) - return &AppListResp{} - } - if data == nil { - return &AppListResp{} - } - return data -} diff --git a/app/service/applistser/types.go b/app/service/applistser/types.go deleted file mode 100644 index 96f89d4..0000000 --- a/app/service/applistser/types.go +++ /dev/null @@ -1,38 +0,0 @@ -package applistser - -// AppListResp 对应 swagger proto.AppListResp 的业务字段(忽略无关 config/advitise)。 -type AppListResp struct { - Category AppCategoryInfo `json:"category"` - CategoryList []AppCategoryInfo `json:"categoryList"` -} - -// AppCategoryInfo 对应 swagger proto.AppCategoryInfo -type AppCategoryInfo struct { - ID int64 `json:"id"` - Code int `json:"code"` - Title string `json:"title"` - Intro string `json:"intro"` - Sort int `json:"sort"` - AppList []AppInfoData `json:"appList"` -} - -// AppInfoData 对应 swagger proto.AppInfoData -type AppInfoData struct { - ID int64 `json:"id"` - CategoryID int64 `json:"categoryId"` - Name string `json:"name"` - Intro string `json:"intro"` - Description string `json:"description"` - Logo string `json:"logo"` - URL string `json:"url"` - Sort int `json:"sort"` - AdvitiseID string `json:"advitiseId"` - Location int `json:"location"` -} - -// APIEnvelope 上游统一响应壳 -type APIEnvelope[T any] struct { - Code int `json:"code"` - Msg string `json:"msg"` - Data T `json:"data"` -} diff --git a/app/service/applistser/view.go b/app/service/applistser/view.go deleted file mode 100644 index eede6c7..0000000 --- a/app/service/applistser/view.go +++ /dev/null @@ -1,83 +0,0 @@ -package applistser - -import ( - "fmt" - "strings" -) - -// PageVM 福利应用页模板数据 -type PageVM struct { - Categories []CategoryVM -} - -type CategoryVM struct { - ID int64 - SectionID string - Title string - Intro string - Total int - Apps []AppCardVM - IsFirst bool -} - -type AppCardVM struct { - ID int64 - Name string - Intro string - Logo string - URL string -} - -// BuildPageVM 按接口返回的 categoryList / appList 顺序组装页面数据,不做二次排序。 -func BuildPageVM(data *AppListResp) PageVM { - vm := PageVM{Categories: []CategoryVM{}} - if data == nil { - return vm - } - list := data.CategoryList - if len(list) == 0 && data.Category.ID > 0 { - list = []AppCategoryInfo{data.Category} - } - if len(list) == 0 { - return vm - } - - for i, cat := range list { - cards := make([]AppCardVM, 0, len(cat.AppList)) - for _, app := range cat.AppList { - name := strings.TrimSpace(app.Name) - if name == "" { - continue - } - href := strings.TrimSpace(app.URL) - if href == "" { - href = "#" - } - intro := strings.TrimSpace(app.Intro) - if intro == "" { - intro = strings.TrimSpace(app.Description) - } - cards = append(cards, AppCardVM{ - ID: app.ID, - Name: name, - Intro: intro, - Logo: strings.TrimSpace(app.Logo), - URL: href, - }) - } - title := strings.TrimSpace(cat.Title) - if title == "" { - title = "应用分类" - } - vm.Categories = append(vm.Categories, CategoryVM{ - ID: cat.ID, - SectionID: fmt.Sprintf("app-category-%d", cat.ID), - Title: title, - Intro: strings.TrimSpace(cat.Intro), - Total: len(cards), - Apps: cards, - IsFirst: i == 0, - }) - } - return vm -} diff --git a/app/service/seoser/indexable.go b/app/service/seoser/indexable.go index c6404dd..218ec87 100644 --- a/app/service/seoser/indexable.go +++ b/app/service/seoser/indexable.go @@ -20,7 +20,7 @@ func IsIndexablePath(raw string) bool { } switch path { case "/list", "/series", "/rank", "/today-update", "/topic", "/tag", "/category", - "/download-app", "/application", "/home-road", "/detail", "/play", "/nav", + "/download-app", "/home-road", "/detail", "/play", "/nav", "/about-us", "/aboutUs", "/help-center", "/helpCenter": return true default: diff --git a/app/service/seoser/jsonld.go b/app/service/seoser/jsonld.go index 7dd706b..9c3bacf 100644 --- a/app/service/seoser/jsonld.go +++ b/app/service/seoser/jsonld.go @@ -8,7 +8,6 @@ import ( "strconv" "strings" "time" - "videoweb/app/service/applistser" "videoweb/app/service/configser" "videoweb/app/service/playletser" ) @@ -410,7 +409,7 @@ func isCollectionPath(path string) bool { return true } } - return path == "/application" || path == "/nav" + return path == "/nav" } // itemListNode 为首页及列表型页面输出当前 SSR 首屏实际展示的站内详情链接。 @@ -449,20 +448,6 @@ func itemListNode(siteURL, pageURL string, data map[string]any) ldThing { urls = append(urls, AbsURL(siteURL, path)) } } - // 福利应用页是一个可见的应用集合;使用页面实际渲染的链接生成通用 - // Schema.org ItemList。应用链接为外站落地页,因此不宣称具备 Google - // 站内轮播资格,只帮助搜索引擎理解页面集合语义。 - if categories, ok := data["categories"].([]applistser.CategoryVM); ok { - for _, category := range categories { - for _, app := range category.Apps { - appURL := structuredURL(siteURL, app.URL) - if appURL != "" { - urls = append(urls, appURL) - } - } - } - } - seen := make(map[string]struct{}, len(urls)) unique := make([]string, 0, len(urls)) for _, itemURL := range urls { @@ -587,7 +572,7 @@ func genericBreadcrumb(siteURL, pageURL string, data map[string]any) ldThing { } func hasVisibleBreadcrumb(path string) bool { - for _, prefix := range []string{"/list", "/series", "/rank", "/today-update", "/topic", "/tag", "/category", "/richtext", "/application"} { + for _, prefix := range []string{"/list", "/series", "/rank", "/today-update", "/topic", "/tag", "/category", "/richtext"} { if path == prefix || strings.HasPrefix(path, prefix+"/") { return true } @@ -668,8 +653,6 @@ func pageDescription(data map[string]any, cfg configser.AppConfigVM, path string } } switch path { - case "/application": - return "黄果短剧福利应用中心,精选实用应用与福利入口。" case "/download-app": return "下载黄果短剧APP,随时随地追看热门短剧。" case "/home-road": diff --git a/app/service/translationser/view.go b/app/service/translationser/view.go index 644db5f..78638e3 100644 --- a/app/service/translationser/view.go +++ b/app/service/translationser/view.go @@ -39,8 +39,6 @@ func ResolveNavigationActiveKey(activeKey, requestPath string) string { return "todayUpdate" case strings.HasPrefix(path, "/category/"): return "category" - case path == "/application" || strings.HasPrefix(path, "/application/"): - return "application" case path == "/home-road" || strings.HasPrefix(path, "/home-road/"): return "homeRoad" case path == "/list" || strings.HasPrefix(path, "/detail/") || strings.HasPrefix(path, "/play/") || path == "/more" || strings.HasPrefix(path, "/more/") || path == "/search" || strings.HasPrefix(path, "/search/"): @@ -91,7 +89,6 @@ func DefaultHeaderNav() []HeaderNavItemVM { {Name: "回家的路", Href: "/home-road/", Key: "homeRoad"}, {Name: "今日更新", Href: "/today-update/", Key: "todayUpdate"}, {Name: "下载APP", Href: "javascript:;", Key: "downloadApp", IsDownload: true}, - {Name: "福利应用", Href: "/application/", Key: "application"}, } } @@ -117,6 +114,10 @@ func BuildHeaderNav(info *AppTranslationInfo) []HeaderNavItemVM { SeoInfo: normalizeNavigationSEO(cat.SeoInfo), } href, external, download := normalizeNavURL(cat.URLValue, name) + // 福利应用页已下线,上游仍下发时不再展示 + if !external && normalizeNavPath(href) == "/application" { + continue + } item.Href = href item.IsExternal = external item.IsDownload = download @@ -270,8 +271,6 @@ func navActiveKey(href, name string, download bool) string { return "rank" case "/today-update": return "todayUpdate" - case "/application": - return "application" case "/tag": return "tagList" case "/topic": diff --git a/app/service/translationser/view_test.go b/app/service/translationser/view_test.go index f4fc21e..4be29e2 100644 --- a/app/service/translationser/view_test.go +++ b/app/service/translationser/view_test.go @@ -13,7 +13,6 @@ func TestResolveNavigationActiveKey(t *testing.T) { "/topic/editor-picks/page/2": "topic", "/rank/2/page/3": "rank", "/category/latest-video/": "category", - "/application": "application", "/home-road": "homeRoad", "/detail/example-playlet": "list", "/play/example-playlet/chapter-1": "list", diff --git a/app/static/css/application.css b/app/static/css/application.css deleted file mode 100644 index 77f3948..0000000 --- a/app/static/css/application.css +++ /dev/null @@ -1,545 +0,0 @@ -/* Application list page — Figma 1920: side padding 60, content 1800. */ - -.application-page-body { - --site-footer-margin-top: 0; - min-height: 100vh; - min-height: 100dvh; - display: flex; - flex-direction: column; - overflow-x: hidden; - color: #fff; - background: #0f0f0f; -} - -.application-page { - width: 100%; - max-width: 1920px; - min-height: 0; - padding: 40px 60px 36px; - overflow: visible; - box-sizing: border-box; - flex: 1 0 auto; - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - gap: 36px; - display: flex; - margin: 0 auto; -} - -.application-breadcrumb { - width: 100%; - display: flex; - align-items: center; - gap: 8px; - color: rgba(255, 255, 255, 0.55); - font: 400 16px/24px "PingFang SC", "Noto Sans SC", sans-serif; -} - -.application-breadcrumb a { - color: inherit; - text-decoration: none; - transition: color 180ms ease; -} - -.application-breadcrumb a:hover, -.application-breadcrumb a:focus-visible, -.application-breadcrumb [aria-current="page"] { - color: #ec237f; -} - -.application-page-title { - width: 100%; - color: #fff; - text-align: center; - font: 600 36px/1.35 "PingFang SC", "Noto Sans SC", sans-serif; -} - -.app-category-tabs { - display: flex; - flex-wrap: wrap; - gap: 18px; - width: 100%; - justify-content: center; -} - -.app-category-tab { - min-width: 119px; - height: 50px; - padding: 13px 24px; - border-radius: 25px; - border: 1px solid rgba(255, 255, 255, 0.10); - background: rgba(255, 255, 255, 0.05); - color: #999; - font-size: 18px; - font-family: PingFang SC, sans-serif; - font-weight: 400; - line-height: 24px; - cursor: pointer; - white-space: nowrap; - transition: color 180ms ease, background-color 180ms ease, border-color 180ms ease, transform 180ms ease; -} - -.app-category-tab--active { - background: #EC237F; - color: #fff; - border-color: #EC237F; -} - -.app-category-tab:hover, -.app-category-tab:focus-visible { - color: #fff; - background: rgba(236, 35, 127, 0.18); - border-color: rgba(236, 35, 127, 0.45); -} - -.app-category-tab--active:hover, -.app-category-tab--active:focus-visible { - color: #181818; - background: #ec237f; - border-color: #ec237f; -} - -.app-list-section { - width: 100%; - display: flex; - flex-direction: column; - align-items: center; - gap: 24px; -} - -.app-list-section__head { - width: 100%; - display: flex; - flex-direction: column; - align-items: center; - gap: 12px; -} - -.app-list-section__title { - margin: 0; - width: 100%; - text-align: center; - color: rgba(255, 255, 255, 0.90); - font-size: 36px; - font-family: PingFang SC, sans-serif; - font-weight: 400; - word-wrap: break-word; -} - -.app-list-section__subtitle { - margin: 0; - width: 100%; - text-align: center; - color: rgba(255, 255, 255, 0.55); - font-size: 18px; - font-family: PingFang SC, sans-serif; - font-weight: 400; - line-height: 24px; - word-wrap: break-word; -} - -.app-list-section__subtitle--bold { - font-weight: 600; -} - -.app-card-grid { - width: 100%; - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: 24px 28px; - align-items: flex-start; -} - -.app-card { - width: 120px; - border-radius: 18px; - flex-direction: column; - align-items: center; - gap: 8px; - display: inline-flex; - text-decoration: none; - color: inherit; - transform: translateY(0); - transition: transform 220ms ease, filter 220ms ease; -} - -.app-card:hover, -.app-card:focus-visible { - transform: translateY(-5px); - filter: brightness(1.08); -} - -.app-card:focus-visible { - outline: 2px solid rgba(236, 35, 127, 0.85); - outline-offset: 4px; -} - -.app-card__icon-wrap { - width: 120px; - height: 120px; - position: relative; - overflow: hidden; - border-radius: 18px; -} - -.app-card__icon { - width: 120px; - height: 120px; - display: block; - object-fit: cover; - transition: transform 260ms ease; -} - -.app-card:hover .app-card__icon, -.app-card:focus-visible .app-card__icon { - transform: scale(1.04); -} - -.app-card__title { - align-self: stretch; - text-align: center; - color: rgba(255, 255, 255, 0.90); - font-size: 16px; - font-family: PingFang SC, sans-serif; - font-weight: 500; - line-height: 22px; - word-wrap: break-word; -} - -.app-card__desc { - align-self: stretch; - text-align: center; - color: rgba(255, 255, 255, 0.55); - font-size: 12px; - font-family: PingFang SC, sans-serif; - font-weight: 400; - line-height: 18px; - word-wrap: break-word; - display: -webkit-box; - overflow: hidden; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; -} - -.app-list-section__more { - display: flex; - align-items: center; - justify-content: center; - gap: 10px; - height: 50px; - padding: 13px 24px; - border: none; - border-radius: 25px; - background: #EC237F; - color: #fff; - font-size: 18px; - font-family: PingFang SC, sans-serif; - font-weight: 400; - line-height: 24px; - cursor: pointer; - transition: color 180ms ease, background-color 180ms ease, transform 180ms ease; -} - -.app-list-section__more:hover, -.app-list-section__more:focus-visible { - color: #fff; - background: #d91d70; - transform: translateY(-1px); -} - -.app-list-section__more-icon { - width: 12px; - height: 12px; - flex-shrink: 0; - transition: transform 0.2s ease; -} - -.app-list-section__more-icon--up { - transform: rotate(180deg); -} - -.app-list-section__more[hidden] { - display: none; -} - -.app-list-section__empty { - margin: 0; - width: 100%; - text-align: center; - color: rgba(255, 255, 255, 0.55); - font-size: 16px; -} - -.app-list-section--collapsible:not(.app-list-section--expanded) .app-card-grid--collapsible .app-card:nth-child(n + 9) { - display: none; -} - -.app-list-section--expanded .app-card-grid--collapsible .app-card:nth-child(n + 9) { - display: inline-flex; -} - -/* PC — scale with 1920 canvas */ -@media (min-width: 768px) { - body.application-page-body { - --app-s: min(1, 100vw / 1920px); - } - - .application-page { - width: 100%; - max-width: calc(1920px * var(--app-s)); - padding: calc(40px * var(--app-s)) calc(60px * var(--app-s)) calc(36px * var(--app-s)); - gap: calc(36px * var(--app-s)); - } - - .application-breadcrumb { - gap: calc(8px * var(--app-s)); - font-size: calc(16px * var(--app-s)); - line-height: calc(24px * var(--app-s)); - } - - .application-page-title { - font-size: calc(36px * var(--app-s)); - } - - .app-category-tabs { - gap: calc(18px * var(--app-s)); - } - - .app-category-tab { - min-width: calc(119px * var(--app-s)); - height: calc(50px * var(--app-s)); - padding: calc(13px * var(--app-s)) calc(24px * var(--app-s)); - border-radius: calc(25px * var(--app-s)); - font-size: calc(18px * var(--app-s)); - line-height: calc(24px * var(--app-s)); - } - - .app-list-section { - gap: calc(24px * var(--app-s)); - } - - .app-list-section__head { - gap: calc(12px * var(--app-s)); - } - - .app-list-section__title { - font-size: calc(36px * var(--app-s)); - } - - .app-list-section__subtitle { - font-size: calc(18px * var(--app-s)); - line-height: calc(24px * var(--app-s)); - } - - .app-card-grid { - display: flex; - flex-wrap: wrap; - justify-content: center; - width: 100%; - max-width: calc(120px * var(--app-s) * 10 + 28px * var(--app-s) * 9); - margin-inline: auto; - gap: calc(24px * var(--app-s)) calc(28px * var(--app-s)); - } - - .app-card { - width: calc(120px * var(--app-s)); - border-radius: calc(18px * var(--app-s)); - gap: calc(8px * var(--app-s)); - } - - .app-card__icon-wrap, - .app-card__icon { - width: calc(120px * var(--app-s)); - height: calc(120px * var(--app-s)); - border-radius: calc(18px * var(--app-s)); - } - - .app-card__title { - font-size: calc(16px * var(--app-s)); - line-height: calc(22px * var(--app-s)); - } - - .app-card__desc { - font-size: calc(12px * var(--app-s)); - line-height: calc(18px * var(--app-s)); - } - - .app-list-section__more { - height: calc(50px * var(--app-s)); - padding: calc(13px * var(--app-s)) calc(24px * var(--app-s)); - border-radius: calc(25px * var(--app-s)); - font-size: calc(18px * var(--app-s)); - line-height: calc(24px * var(--app-s)); - gap: calc(10px * var(--app-s)); - } - - /* PC: 1 row = 10 cards before collapse */ - .app-list-section--collapsible:not(.app-list-section--expanded) .app-card-grid--collapsible .app-card:nth-child(n + 9) { - display: inline-flex; - } - - .app-list-section--collapsible:not(.app-list-section--expanded) .app-card-grid--collapsible .app-card:nth-child(n + 11) { - display: none; - } - - .app-list-section--expanded .app-card-grid--collapsible .app-card:nth-child(n + 11) { - display: inline-flex; - } -} - -@media (max-width: 767px) { - .application-page-body { - background: #0f0f0f; - } - - .application-page { - width: 100%; - max-width: none; - gap: 24px; - padding: 16px var(--site-shell-gutter) 12px; - } - - .application-breadcrumb { - gap: 6px; - font-size: 12px; - line-height: 18px; - } - - .application-page-title { - font-size: 24px; - line-height: 32px; - } - - .app-category-tabs { - flex-wrap: nowrap; - gap: 6px; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - scrollbar-width: none; - justify-content: flex-start; - padding-bottom: 2px; - } - - .app-category-tabs::-webkit-scrollbar { - display: none; - } - - .app-category-tab { - min-width: 0; - height: auto; - padding: 6px 12px; - border-radius: 25px; - font-size: 12px; - line-height: 18px; - flex-shrink: 0; - color: rgba(255, 255, 255, 0.55); - } - - .app-category-tab--active { - color: #fff; - } - - .app-list-section { - gap: 12px; - } - - .app-list-section__title { - font-size: 18px; - line-height: 24px; - font-weight: 400; - color: #EC237F; - } - - .app-list-section:has(.app-list-section__subtitle--bold) .app-list-section__title { - color: rgba(255, 255, 255, 0.90); - font-weight: 600; - } - - .app-list-section__subtitle { - font-size: 14px; - line-height: 20px; - font-weight: 400; - } - - .app-card-grid { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - justify-content: stretch; - gap: 14px 10px; - } - - .app-card { - width: 100%; - min-width: 0; - gap: 4px; - border-radius: 12px; - } - - .app-card__icon-wrap { - width: 100%; - height: auto; - aspect-ratio: 1; - border-radius: 14px; - } - - .app-card__icon { - width: 100%; - height: 100%; - } - - .app-card__title { - font-size: 14px; - line-height: 20px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - .app-card__desc { - font-size: 12px; - line-height: 18px; - } - - .app-list-section__more { - height: auto; - padding: 10px 18px; - font-size: 12px; - line-height: 18px; - gap: 6px; - } - - .app-list-section__more-icon { - width: 6px; - height: 6px; - } - - .app-list-section--expanded .app-card-grid--collapsible .app-card:nth-child(n + 9) { - display: flex; - } - - .app-card:hover, - .app-card:focus-visible { - transform: none; - } -} - -@media (prefers-reduced-motion: reduce) { - .app-category-tab, - .app-card, - .app-card__icon, - .app-list-section__more, - .app-list-section__more-icon { - transition: none; - } -} - -.section-empty, -.application-empty { - width: 100%; - padding: 32px 16px; - color: rgba(255, 255, 255, 0.45); - font-size: 14px; - text-align: center; -} diff --git a/app/static/images/au_flyy.svg b/app/static/images/au_flyy.svg deleted file mode 100644 index 6e75a99..0000000 --- a/app/static/images/au_flyy.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/app/static/images/figma-dialogs/download-logo-mobile.svg b/app/static/images/figma-dialogs/download-logo-mobile.svg index 01050c0..731dbcb 100644 --- a/app/static/images/figma-dialogs/download-logo-mobile.svg +++ b/app/static/images/figma-dialogs/download-logo-mobile.svg @@ -1 +1 @@ - + diff --git a/app/static/images/figma-dialogs/download-logo-pc.svg b/app/static/images/figma-dialogs/download-logo-pc.svg index b695f62..65a2859 100644 --- a/app/static/images/figma-dialogs/download-logo-pc.svg +++ b/app/static/images/figma-dialogs/download-logo-pc.svg @@ -1 +1 @@ - + diff --git a/app/static/images/figma-home/footer-logo-desktop.png b/app/static/images/figma-home/footer-logo-desktop.png index 5ae6f95abe0a54814e11f98b88264c28ed80e4da..cb4aff0af628e8b36993a5d89e52fdc97fa40f3e 100644 GIT binary patch literal 15239 zcma)j1yfzW*Y&x$I}~?mad){$@dBk-ad&qu7k9T(oKh(67l(@!cPZ{(iaQi|`2F86 z@Xnmc$(+gLBrD0@Yp*0xYASM=XryQW0AMP}%cuhY$niDrih}f-x^;^z1AvH%f{dhw z_tJ5Ik2jfi$Bmz5lDSVx&VoX_479%S!;Jl^qkxFPyGe8fr)9l-@ZyL8#C6k^<4rQm z!boC+=M=#!Idp10|YF7jEwTq1~=@fOu7WuC+uT?cUZ1)7v?Ph~H_6W~OftN(=#9URF0~Cb~86ZF}ppbF- zC%YLuA*Me~)_xv@OyGC7Xqn~k8S&()X?0JKCwMN@?F$M)p6D^imk4%DZ8j5|z3&By z4W#4lp>XYZcuEvQaHt=HRsaGWPnJ!*AAN+XBbP6J)u0pAd;%IZw=H~Q$df4>yO&>~ z%;IxS2zW4JjxKiQ;)qFDQkQoGF9Yj&B|$@ZiyIEFz5ijBeLhAeu(C1u#`*}%mbZg$ zL^+iF-g>C1r7nyrt@_FSJ&nPeAMP1tWvS||4(a=gmV(+bPt9Xp;tiFYkKx1uv}tD2 zcBn3$Uzj=V13QMJ_BEwh@wuLF*<(+%YO+&*qLMVo6}Fhnm0mj;7B`7j6Fj+mI^u5u zkTlVMxNEyx?hA4&ZLFaIp@~{jgT?;qWRS}6mwl&FC3zMIztkX9>O`8t+I5BevlFtJ zk=3K_=NE?&t96-xyxv!oY4`sj9{kIY`FG8%?Q6ys8chj6+=L=N{)!M-j&7N=F8r8y zBhQOA>xQz>dYF|S4L))3M8x`Jzbswzp;1WT`KD+mqB z9G2W&rcG?|VN8IGi^#v)kmrr9%T`e$^}D0hJ~qL<)!DF|hk9UrDPfD*w;k8+A{p$y z(T8gT0L8;#J{h7fyhh+QzbpET1Cglsq=$>Lx5h{O{J1jJyodr4ilp#qVcnMf4L8oI z36eQG>n!U2DQn)_Z(ClTv*j6;wMWpE=17Xewp|%Y8@@6|DhHaCi-T~bpjIfYY{GQe z=tGQS;`Z=37AdbVD<0nHt70u82$^M#7bYa%=;68MCt&WlN)df^JAXge*7|Kh*yb(K zPZqp#QmHVwrJq6gX%CI#_;y@NK6vpily6yJy9dPB>Q#W*mUd5PD>i_VBOA+;G0Ji@ zy7q6w(v|Wzww{}hQ(2j1tF0|fC@+~L(;MM``c=ereD8Kz*QeneeYfL+%TSt#2->hB zi|SXX-tWuL*fytY6hLdyOg%7n#nKQc=ar!WJ;<>Vhy`_QXiES!w!(oJ9$Y@xv7<*S zuWOonRi;OoS&y1P%&Z$3Vn1qK+p@8-%9ssz`fqy$I--d=wB@?Fbv93>>~D;3f1v+P zghMq;s5^4StjI8MC(>t`2(PJIQg0|x>p;RENB~kCB12`)aK}beuv&17emN5<&A7%0 zlZs8~2YZWdYa#>SOyGlJ{JvO}0qCPUofAW_(!rt3G*Z85@yM!kv9`Zwb+ zGu7NMtd*8T1#Xk&9NxZjLS}NSyohfj9FS%hdVw&Hfiz_@Od8%{%Lok@wsdO{^DRo9 zJm3)Uuf8^2ybCSHOB-?u^ zfP)EN1jBwcq-ImUx$L+3zsKy!P|hxl@gy71<86N9x+0{idTo>I`~9uhT#)az#n%WyPk;q(8j3IeG>$#49yk*pH=CZ@r;EPEJrP`l^9L3Q3>x}Hi4%=qac};DKB;nU@i6Xl)ySXs`SZK3;69MZ`zrc_Ik|1 z!ZPS$3>n=1Jf-R|PsPxT7I^sh>t8?kHVe$c?LrQILsY*_F8rB2z-`W`$eeR}MHi$A zLqn(TdYCbc^jeJ=FKMe4G$v>Fzekcw~&!z3%+&?tLI zS=qEbhP$GTlJGuls6F#eWY3ICSn{rQA5lQ;g770b&xx{mvZHFE-gF)DR`}9e;{kn~ zd3YfNW%5Ac69&D#V%)NknhWVuM5BKQSQ1M?zi9dpPh~bl$tH6-{&Hjg4kq^%sDZ^Q zk49_vmo722)a>~*Z)V*N$$nKbXj{hLDPwmEZdQp!U$Q*I@_Z&?xK^@a$SQ(g8*yya zN^yCvd877#$L%!QzseEMYs#O7!-q^gmt8)2ug|%yFF{-{kH>3Q9ZSv#{+2Q%fj$-K zMkMrYd^k?Mb%dBuZ;%CKQUz{H32$B^vQnQUYR>)o@)-UImOWB43Ph+HCKN(;rf5$) z|9Bdgdi&u5JW{iskhDLE-P=+IO*Gp=hz@-^(9-z5i{l`@ynhCfV4sxvlP z*-)X|-xuY0b#nz0+BnuI&*f6Z%+70J4<6B&6b zdTceH9%%mdofM*exGWA5yWavWv% zRM!g;K~7{U2%iOTu@DLuA<9oiVy!u;B^Dd`f{1|}@OF>BS&4X=12o>;KveCn+)eVc;OAFr ztp>;Myz18KgXEgL3d?5Q*@^^0>?nzGqT7oou%Tb(X`^<(7H(6gD^sWU{1N(hxFBy? zQd~RDFha96icM@jm(OQdgZQhqT^6BPpeoWe>6IK0JHL&Wo! zxi0C@LsUyNzO&P$ISwi6gzC5B=}e%Z712zrNY*E`~(Byj-Zwdqc6 zT}`F-B*(?;f)MR51#gWnI8dK#8vTdXQ!NQ&f)K8CnMsX;6aky9bhvwpbG*XcbOoD$ z%(fwGoe9nX7{s?0AY+JLyyLOz-S^;6$|NZkUgamtyJ3B--Y;y|EI+mtunH1qyH^Zi z*@<@0=GT;4(x=@J>y?$mT=0q*NYEWLSGFO z(=6rsME&8&CN;rNgoP=+Q9&p#fMci7x;h$&o)AhvobBUwsF#r%z+y^!uhE_M4+*2S zsctf1a|lOjo4)KLlf{gU&V36rlCS;-+ix0)a_CrYHeRJO)UxL;j?lw0tN9%j z!`0R4Z_}l3O6G|WJ3))tR!xGVDRBM#F;;lW&}1`0 z#k%5|H_e#JWWbut8yj6xiLc>$cTf_0J;Df>nGMDa|DVP4hGX}|22CY|o2fLJxY)BS zgV2m`h1N4ld^u!cjUb_t`yzB94i9KGn^G9TMPVlQL{6;1(!%v3SmZQl8R3=9q~i-J z(gEZ=`hW?F=hPzqsSaA$4ectztZZ?P(hNElJftnWx0^EoX`E8e7K!i+MiAO7@A3fFN}q>noDfEzWf6$B*fk;!3^D*lOe&`8geY&W~G%xG*bZBehiIRSo=GJ zj9S5q(Hl5}s-|zN|A_M&b+c>q-u|%J&)`y~BzX!Dc1^rrIaIVl)dI7Xl{t=i*>qHt zHxfJ-odo!5brDl1qzur%NsqQU;;0{@5!gv2OG@Fnj2}$FFUkma2o?Q>hGO-nxSt+* z8@{6vr+kU5%B4-{7)<)j1%1y*NHiPm5mAbN@dl$mhgv@e|C{NRBeTa&oJm%YE>_Eo z9gJ2Wjfn|mMMZ>a=--4z5*v2Haky!-&{#M3GNy=>eEGYtmUg5`DPwMjbHR)IK{mO& z&nj*OJFP=yR9;QOioE?Df?U=j^Dxb@cJ9B6kn6Xo1#l;Cmx-cRG~T+-XgCJ_rpMdq zP4LqbU)@48p&QDESVJXgT<~-q#=MAqL<2-5HOylWIqlyWr!Qrfi*i}Mb9e^4(4b=F zL1|{U;^OL{0$(BXMi6eG0QvA#!y+FLs@goI>f=4s4tEf0Uz7N+`SO?I*u6+y!@arX zYTLzbqlpP0EUV~3|lp(20iC%Fc)Oh9jY>z(5+4=8ch<3i& zWGzC~I>`N3uvjC^OZ%i1I#NYeMqHP>Xe*j3@2HEK;ZM1?sWkStGQ?saTzhbu#9!Dum$B7b9=J(cw@vGW!{*=PzeL-5bbG=cwOw;vefqVpVb2z~T%uhLuzo2GI|~>yhi$ z6RLV5voscooJFm{1GyD|ptu!d_5?N$v}8{~B=Qb(lI=jdoM&d{=c+{xnxeGB+{$9O z5g`ZsdT7ocaT01LtBqE+H+~E)OJ-5h?7GK^x4a)naj3E57tgcD*19WTm*%Ctk~ zGuQQp5L?^wJ|E?vPsVEtk1eqG9}Vv{_DwXit}>12j1n(_1h)b*PeQRIn0F1 z{K!4B%QDW4U0?b`H-AE33CgeL*3?V6xw2^TBv+nAyrI z4sjqWb?=)6(}*2KLVy+Bx<_`DtsXz`g?@snl)PRso?I&>OJ=Ik2)$112gR@!A%y|& z$y%MRxFJd`*Fg&S@z(J%q4~a@eHHBym147j6nRoXtczwht=ofETllr-wwLbr%j?J{ zyLe~ph;_p9KtA?GEatG3z9OT^@5=tMVtrPgYZy^~j{t+|`^6Pw?zI?6t2Hfo)SB4i zM7CmUG@EttWf_f2HVVh&^R@u?l#E^1X?$0Ytwaj{bE30@;_sY6y*_4Zc$hOpj=%8lYk-=4z1C#1>qF*zwaM=;-bp4{kXA#*>N+Vr z+O~7Cd`VC=ISi)x}@g=8Gr&A+kOBt}hjzJ(;1E@4?J1ptCron$~A&oyKZ>hxHfq!z0Qc z9xZx(+3eUG@6xtk6+l<6sxW;BKZf|KnIAlg6KhD#8n#>%!YgLX@s@EWOm2@c;gusT zW`CqSNJ7i`^GRSl%O^~N1xxSrUqwd#(el9|?~T<<9L}{>l=71Rtq^P0pd0-mrZlC$ zQ|7PoAtAf-z$L9D+AS;z`CU&3raWU@(RY&xMi}EVBR2B+UI+)kM0+`2{ht^aLLr2D z$;fbx4-lVja-G!#e`CXRWbyMzeHFIif@2{;95$o=rI~{7%(ke>AWP;u^HU^tIm>6wN#)i?U=^hm{$4 zOumP_-XmWS8@1EBTZF&z|0kqI(Q)PHOfo9g6`I{bPX>Y_3}JeY!fK@|a4TC46K3#@ zud!h|&jvr7XR)$Kk`O$fh9k0XzwZ!UApXh`l2y&A4C^w=tmULiAJhtc;i6Ne{c2<6 ztnpa#UIt8HS}72_;Y3Ovi*ueQt_}={?UR% zR{-&F5RG$PpRPh5o;KSr^Thn0qc^?(Z3JAPuee6>#7@fm)`4nH@{ch3>S}zM4jF=E zb)G3xowI-1bbLDye9eF}!Z6ZR&2wDKjXnvHx;q1Q2!Xz$uZ05($Zd*TzU;49O0z18wdw+Qd}~XGB^T z5@?m*(fY5M?m6nWLGTPNeUUgH^tl;vy^plsR3QKuSj|%sK&VY*08h8hx%-}kMYI)l zC8+Tx11r`Q_iR9A+;~y$2spyXEyKRjv$?kIg02rO0^+y}e9mO*RdDT!UFH$wET* z>O)HyFoF;i1jp&sN`)uy?;KejY$46#F>5z;-rM7HT(6$yeKwk;j(wu^#SE_dF|F%= ze_p)iM&M361{os5tR#-0Ia0;h;{vKGYfU_Gz`vd_+NP2i#kTk!!bqLp%>z%QoFxwh z<}gh3xyjuj)IxYa#r1gFb*imB&1v z{R*ic)uaUyLH`6G9PoE?fGRh&_TT+A=za9(SQ8^GV+x1}C=?@)ZUm1`JF-Ij&p>5t zto*_xJsM>RcjGp|ge1M8DW}nvi>}0&MZDNdDVvJ}!tDK zV-RNi6+hS{-u;?I-GOT&@P@fiA4>3vQci<%%7}g=|A8eZZV+$l^{w~D2$|+VaRdz} z5?W;-!~QaREjS}>P0-+GhTBg>d*kM`EGn@2!wV1m=COh$;;^b3+4&8iT98C3i4tz+ z>KgO3jmC+kUz@bg|Mu(BHS_yhLH!_keKrw7oL3cuI6;9SvuLS88ENb7mD(jD7Hw); z{_d(BVWTNm^@(p98i>jRK_+?o2SaV<>s-NcPJnC10K-GH7rk1%HzW`@)PX>Aj64>C zOfDKt27{+)^*xPywl`4#=i;C5=3dAyh_op2@A2T=gui*RS7J$ZLz>i?5|b?q|Me2? z+tJz2muJ(RWkV50*sPi0-Nu2v)Q(vUe({-m5gO@^M4k`g=jk=UzkaYq)mOyNQ~qJ~ z_+TpNROsf4G!bdv#FuB1_idRrD;Z?Pyk;uS!S%O$l3+uu&#+|@dfl02x*ht}kXIqA zq|Jrde7aMC4~d3&59hBo05Q@VNFm~&{et*wRh+qz3jQB%WH$~@Bu89!dbV*;2mn-; zg9AR{YgIW-`Zg@f{V=G81EFGJOp1c|G4g-V-?3A`6f*(_NyNdn$$lTFMFsdM%Jb;R zj!nd^L^pU1>%U2JpfO0pw37ch6q7Ay7qHDD)P<6kI3-`3w7=~4n7v=$X>xUlwt?q+ zGa+NU!5Cyi64sj!C(%ZmfWNY*j+*U`x5OhZ9pObL&s5?w1k#if8$foOPb_i4`7@x1e3g#bfqHtrMc5xuR zM9=-84Pk%-p18(Y)XMuS8BhVL!TARNk_D_8_o`Z@3jp4jV6R}eqdXswKE?)(b!!)# zL%HuO3HIy+0ml^v(*ZahXWKw_@A#pqL)#nhB+Qa5-$zz79RcThy%PzB0$C-hk~_@` z0fbp8RTuf17d$x3j`55G{9(>Uwn!<&KsM%vGQgmGvVfdFFzL7pto1LMiN2SpGT--Q zMcy#zA1~cDd*^o^sr2dl{8fT-U?6iGmm50Sgx@rYl@v2f<%)#r?AJfwT2ONeK2qu0 z58-X;*47Ad6i58!?PvRC9@FPI1griE?|nrt;$vhu$QBtKoVxp;xK(FmSj~t0xRukv zKpfaSF#C0m4Y-B73kK<1CnLMSL*xKa_>E!uhrDr}HLMLupbI#wB`^dY8h^vz2}82B zLc30o&U}E0I=g%6=vRaSKrki%1Kyhy)&;+SHtM{44&O`$d$X9lI4u3c=ynWv#)s+7 z+-?J%y(bEAXJSAWNFQ$Fmtd@xgb@WK2Z-l}6{1!#t#)z+VU zg$<S>@s?5@;J%6(8Ky zd=|iXx*&V*hOFo6ECU|Iny(=LIxBe#ge?Jka>KOvaCRM#Lw%_tI0Zf!$;$L)w5J!X zx>2Y)wohV0NAUWA-Izu$N+LP2hb&-vhHtf;F->St=jsJlm-14)bd16}gezOM9(miz zeuK)4b>9>afNREt`2yNJi3(5xHnY{;hGz4*1P&FKb}Y1VkZ3pT5drc@Vx~z#=T8M+ zd_+>Ok-WzrY4MEaC*Rc#`S%_OG*xcH1M@(<;G1)vev6Py(uQ@GavDEl-z>6B@;Amy zU&?kM!T7Do47JI4U+M_v^+!+i<|B6rvc|L?WitvD0Z~|0LY=}H1Cn?nh6cM8a6`dw zQVgd^5$b5UL0|J_sap%=$bYgn!kFQv%#yFc9W`UROfz<{)dk<2@btor)H6{>h>yK- zEjZuHRosyhmu3h0H_k~y-?N2YLZ*s8U3neBJ@FQSv=hiCMCK{35KyEi~oirF)~)&@r5rN^M9DsjLqtBOVNh z*~<&2Aw1@_JBbQ{s> zAT0h#>b~W^v@|SRISjcbP*Rr(7IH6Ep$$^u=M$2T7QRk8NR zB>=Qu{7ZJ_op;P_sin|YWxfhlch$5mPMl}FtUN07=8XiYU)PL4y7fOoL5x~xPAZIQLfQh6jRpCw1!97qAvQ%Lut z|B!CH>z(uC2^m5dTl(k4kz?YbVU6kAm#z{<6gB5owfl?Y?*?(s$ z!nl-Kv`PUi8~T2rFu82h*$1nKE?M9<^0#@iU~wBuI*y#wyi65F-{!k0ley2xwn)Em z6EXk@-A0xj)WHyLEeXb;>ecH@z9c*QS(zzEX0132g2s9n3X zQmqe!4G-#`@oHt@Vj<88Q*yH!$$FFYa%FXwm)Bk!A-`(zB-%$Go|j%O5RtD zqT(q^5w?Z_LEeN+X6b%}_-LQk>ORSqkDp0mEEsw%qCrYGAbmMn>R{Tm&&!-l!r!P>&Pg}9)!q7j$ z7L7(EtbMbcmv%X6DdvM>tGIoyCTji_UfKTCP1eDtQ}sB zv3DaT`}NVObH?o-U=ZaI1!Vp;FU`kKndY+CR20a{vhlMbIlTShFOAtfO&493YF&S^ zBus0s59ia6UeZAtn^Z*!qly})tpXzq&r%c48^{v8dVM>aNYM0A2U_a15G3G+dUFNl$F1c=o5nU37~&#o3FAtInVs%g^w1%U&f`_U2;nQ zn!ZW{zyqt{ggKs&^n9dJfkQF#B!6`>V&?(&0mu_`@Pr z+2ASmO#H=TpJOBEE3B|erJ_nFJhDVlWM8;?*r62?F@RXmim~7hs@A##Gkc@hW!Mc= z7+`hl$!)kue%S#uDIH^S%9azlJtPrqf0-FdXPKMJPK8)>IT7;SCEEvZN{j#vcQcJowxC>!B?m5(C4 zIzrRRQsBT&4kVvFXBzG2)J9TV1&)28*evK~#$y?-mmYsX2hc&+pEO2@L#`0TGFLBQ zV>ZZM9CsfWlgNMehbUZAZKcUs022}MuAo`JCO||2S#F0bjk3&>Z-3xag~0DD^`-3&R~wUZfS~jGyNI)AFY`*{cGDTVLyuMGgXS3}wr*E5Mfo6c`a^5v%y-T7 zq~(C@B{BIHwhTDnqnD`MoTo!|c*9kB&p`F|kKerq$A7x(unl<3@Lh+u0S8;yEEQG3 z0c8X+M$nb;Pk0*PV?9cmkrBnWRobRVMa@-)(scnju%+EZ$~%0`WjP^UB59p{&3C0+ zC;>`*ez7B!Ib4sRqLmL5XTF+1;z)Lx*JcliOb!P${ZRF-<`qr5mu)l^?9lE#R~mQ4 zqIYfz5EZ^7r%sAnfR8x+dz+{`Ccd> zkjK)R@p98+S3?T)UdjIaDiNh!0f9>tWl2=;Lh3PrSseaFH3Xcw?)z}kLV*0Vlzu#I z?%z)LQ=%?5{AvifOW|td#%7fxhr|k1*7re3hIGN!DN(%0v{ITjzCym0w$P3G`_bf5L27oFb-X-s^{0(m~}9bXycwR&4bnM;hX_fa*} z*`iodowO}pjnWYw4sVCMq-^9}YbZRhxq6Iu8)Ed)@yLmK{fXDK!9GMgvi)_*ovbSK zv@J9E2%?;{P`+QiW{yK;CEdq^b6+V5{`BblXHOk!`Y_$fg}L`<>{ArKEsEm>&%LoE zTK=?$OVDA$>nF} z>cgW#HG}Xus&?GE>V%(P!uG#w6o$*xpTUuOXRY9eHICFS=^;OfF071RW))LEK7fZm zZ$_B%u|Y8l#XTzWl#QSN7K*TnU-1!5G$l~1+k;{~_Lj1lN<&Hghq0w%5LN~m^JJ72 zy_iIM0S&F{=h~ zipr`Zf`owVyuH3pKP&XsQ?EhZZ+H`mOsoqot|$2!QB`19{Kc9+3pamPRN9McC* zO^?(~4{!IWGyqtOOU_&WJzbQ%7NVX?ZQEShppSoG;895Wt%ua=x&D>tr|J$Yi}`Z2 zXDHJr_BMkMC9nA=VX3Fvwi27JkO20L&P`utG zuara|#x*h#PoksNT|b3A^~a4K$$prWcvv?=XFL2{^^j!M^?q;Tej`)gQ^1e^>fEPX zfpN(HUiTqz^$QczbI(s3GNV#BSz0Eh0_AX*XTtf73XT<|C3mEMtJUAP2i9c=K5=YD z$Gwr%Z^kj4LS5tg)DzA93Ha#@S@tJM(!~y0cfpAdpiz|l+|w$H?Bbvc`r<&rwU5IU zk@>1ePi^}lZLC}hsC5A1Y!cONXHP0`1gpi_@jD~zmy5^YH^kA#zUN2RqUG?RhDY>u zFKmjCEXxxy{KUTFf{yOwGnn9EN(u&V{y-l4w~*iB>a&vgfC)cuN1~$;?#bCnI|=tm zJQHjinSpGEpnHZr;r?mPS=>xdX;OdEu@YK`7ZTCX0;#YQe#?PO>P>I;a>)r9Q+$egx zSJ!uLGCjsQv_xl@9p2~P$G2keR~0p}KlUCgonam`ZK$vI`E}1B-;cbZ6y$36#=}35 z2{ZmZP9g5r(ow{#?Fw$f+7jkS4G5Se-=Zwob@@)2q9T~f?2P$C<0pHF+xBZ9gImUd z5MPa>fQT(RPqR@gfY`Y#7iOV^SZi{AW&TMP1$ZsoaF9jC(E3<-8IAsaJ}?kLf7>)I zwXIZ_88=A8h5{6MF+x|!Esjl(7vx}nD7@BGU}1w!CKYUPQ)7h17Bsa@ge*ERK99*p zybpr%W-JI@YjZ*Jq%YT>6|vlS^i~u9grr*}njO2=ANpR;6HX?Zts-vtpt~lDlRRaM z{WUVilc879%Y$c|S@~4_*HeCja#%7Z)IKcT_1eT*;Rn66p<`yp3-V0>YQqYH6a7#` z;Rsbzz1u&s22r-cQZ{{O;g>^H~Af&7F-!YfW^9G*~*-3z?-?mB}rt4Hj!kw`njI|>?VX) zQjgl@8F`VbNLz7P=GvA(M<|NmL}A^6Zwn5dK437F#-x9_)F|Ol+*Vhh#EN#e4}LZL zY#YUXiJ#_uE%aRq-ew4Cez6bU-zc^SWg?20H`HY0$bA~gQxv+`Wc(~@$i=zU#N}}7 zW3Ax1q@&gHYqIbN%ISFnn0=2%99zI2}IQWEykB{ z+%1jnV%WcMb(;U4_@vL>6INbek?lvKYZyPk`pl0!wtp*ZeJ_=3EPR-vtfdREk^Dwp z^m;*L!;yy$$~c+gAI)JT297PbCN`eW+0(+o=W_gzH~rBxP_9h*s>r?6)SjUf*TWkQ zY9WW#-j7TlklAkP7zme{IP3=R83lX~(`afXcgN3ytV{+cJS^_dnu_1&)t^7!E8{CN zAe@BzLBr{&p4XkgZxhg0(g;TmT(p^5Qd@EV{28FQeWu-ejQ?(MmOwdxEbfi|eE2}- zGQKoN{Kf#sCz{ZyGe}7TOW#FEQIzH9mzJb{->nsYk|Iwk(gE!0p$AjvEDlEA!A}agQLmR3)!e9FkjMEN{BU*&-Zn)% z(stIrrIy$33T_pb!FdWrb%*k(bu1Ne zB@@_NP|Y-VjZ-$Lev3acRz8vBchQ;S&~zuE8S!*D(>)Guc4muP~75Mm-=ZF7oo5?h>dE=8ks)bzPsUG`sjJ=MM})q$eFo{ z?vUarVi!}dJRmj#cHl^v4J9~9?JN2m!FKiCoErbTjdJ>}2%mdxPK%Qm?=t7#7fqjb<01zCJexFp zaS<_O&Lc^yR1QDikiOmSj%c`j6BqW8DLv%ELZ{XF{b=nkOf0m7n6uSyZ8Rju$fE2h zYYY|nJ^64G%(?u0kiRF8zegb(l_Bbz0F^V?aw^6ZkxGC>qwf=9fkn%(ChOj&i;XTn zypfB6n4lBIEXBmfxi`Uoj&=~hyHNe%^IXNX0~*?jif~c#Q0JpGwOh)9*Kyn=vyJ>W z@<_v~(+2`tF7TKEH6?~zWE>4y?^~U(7uW2xc{2#z+rcZi5T5hNR_U~%m@HkrU2^N{ z^^kO@?J0s2xrg)hM(_5i?^|^C_x>Q>Hv*ZUqszaNH1wB8a41#XT?QSzW9gy^CkC*PMoP=zaVc6RXWpe?w#4&09`v zCXrestlIt*#bur5qPw8T$im0{o#(lw?KJhkXT6h3(&dBBM+paUwF|966@!o%?7su* zNyz>E4G{96QQ%ZJvrvJ-yGtkDS3SDF)lF^dv!sFgNOBi%?W=_T2{F<&%SQoe9`BiA-CP#0Pd}`H1wWbh;4J{GtIK$a zEzZdNsA{WeD~cD_5R(o3+~h7HU8@vn(T-GaOJG>J82J}Pg9~VSHoP0pg{Q|j`;Wo_ zGS0r>eqgtSKkTNxyNytBV8VxKGecAIkR-ony-mIlbEwqiIxr^iF$EmYKPF5}r?QJ) zK^54ybRzW^_@Tz-2B3~Zj^NoLJZBK{B8I&vxtzG4s!BXN{Z0Gp-Ql!84!*>J zKi6Jh$$b+x2#)0rSh3Y}8^t`;!JEKFg}wZk`rYrA!1-m*VudrE++ zgjA_8>PN9CR(=oHrC3{)HzG!?Bws&VM^gAVYhzqES}x!5uLf6)cZ^$Ft(NY|{>ceK z{A(^wKJv381S_-|*w1=|dyAbH&omzT%%YtV#nL-Ve`a;vlC1v`e z{9WpVO4L=McbfGTEkXe->A(lY05{}q6l7_%Gj1yWoR+FG6?4R+rRFoJvD+{7;$pQf zcHIJPiQoARz4Os~(-*X{BMS`O@nfq32NfY5$k6rV@E~ZZ6BcM;RzJ*7)@){uAC_Tz zhri?trDpXne~&lEZQx){5*6+nIZ2QKUAwm<%N$4P|)W0&T(4rY~CJrrmrI z!S7wkP0&wONp-`mU;SAB{$AqKqYGzXt{{%Id*C>R?q&G%^WN6JvrZ}w41tysK_!== z*`TJWldesqFK)(hF=WzQ5Jc*WMaXvD!H|mj5zT3U;fK(K>zn4=)c2GuP2P8>R+%8 YN8(v!eb$d(FW3SK?^R@~q>O|A4_9dksQ>@~ literal 6347 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 U<-YO4KYz0-O6rQG^6&ir4~$MM82|tP diff --git a/app/static/images/figma-nav/benefits.svg b/app/static/images/figma-nav/benefits.svg deleted file mode 100644 index df630dd..0000000 --- a/app/static/images/figma-nav/benefits.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/app/static/images/logo.png b/app/static/images/logo.png index 47e5c3c7ccb1373cd8cc491f81885ebf571668c6..fd6533aa40b2d8365c138060e9a1d0a5346e2142 100644 GIT binary patch literal 15138 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 literal 6404 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 YXE { - const isActive = tab === activeTab; - tab.classList.toggle("app-category-tab--active", isActive); - tab.setAttribute("aria-selected", isActive ? "true" : "false"); - }); - } - - function updateActionButton(button, expanded, limit) { - const label = button.querySelector(".app-list-section__more-label"); - const icon = button.querySelector(".app-list-section__more-icon"); - const total = Number(button.dataset.total) || 0; - const hiddenCount = Math.max(total - limit, 0); - - if (label) { - label.textContent = expanded ? "收起" : `显示全部${hiddenCount}个站点`; - } - if (icon) { - icon.classList.toggle("app-list-section__more-icon--up", expanded); - } - button.setAttribute("aria-expanded", expanded ? "true" : "false"); - } - - function updateCollapseSections() { - const limit = getCollapseLimit(); - - page.querySelectorAll(".app-list-section[data-total]").forEach((section) => { - const total = Number(section.dataset.total) || 0; - const button = section.querySelector(".app-list-section__more"); - const needsCollapse = total > limit; - - section.classList.toggle("app-list-section--collapsible", needsCollapse); - - if (!needsCollapse) { - section.classList.remove("app-list-section--expanded"); - } - - if (button) { - button.hidden = !needsCollapse; - if (needsCollapse) { - updateActionButton(button, section.classList.contains("app-list-section--expanded"), limit); - } - } - }); - } - - function scrollTabIntoView(tab) { - if (!tabsNav || !tab) return; - const navRect = tabsNav.getBoundingClientRect(); - const tabRect = tab.getBoundingClientRect(); - const nextLeft = tabsNav.scrollLeft + (tabRect.left - navRect.left) - (navRect.width - tabRect.width) / 2; - tabsNav.scrollTo({ left: Math.max(0, nextLeft), behavior: "smooth" }); - } - - function scrollToSection(section) { - if (!section) return; - const anchor = getSectionAnchor(section); - const top = anchor.getBoundingClientRect().top + window.scrollY - getScrollOffset(); - isProgrammaticScroll = true; - clearTimeout(scrollTimer); - window.scrollTo({ top: Math.max(0, top), behavior: "smooth" }); - scrollTimer = window.setTimeout(() => { - isProgrammaticScroll = false; - }, 800); - } - - tabs.forEach((tab, index) => { - if (!tab.hasAttribute("aria-selected")) { - tab.setAttribute("aria-selected", index === 0 ? "true" : "false"); - } - - tab.addEventListener("click", () => { - const targetId = tab.dataset.target; - if (!targetId) return; - - setActiveTab(tab); - scrollTabIntoView(tab); - scrollToSection(document.getElementById(targetId)); - }); - }); - - page.querySelectorAll(".app-list-section__more").forEach((button) => { - button.addEventListener("click", () => { - const section = button.closest(".app-list-section"); - if (!section || button.hidden) return; - - const expanded = section.classList.toggle("app-list-section--expanded"); - updateActionButton(button, expanded, getCollapseLimit()); - }); - }); - - updateCollapseSections(); - window.addEventListener("resize", updateCollapseSections); - - if (!("IntersectionObserver" in window)) return; - - const observer = new IntersectionObserver( - (entries) => { - if (isProgrammaticScroll) return; - - const visible = entries - .filter((entry) => entry.isIntersecting) - .sort((a, b) => b.intersectionRatio - a.intersectionRatio); - - if (!visible.length) return; - - const activeTab = page.querySelector(`.app-category-tab[data-target="${visible[0].target.id}"]`); - if (activeTab) { - setActiveTab(activeTab); - } - }, - { - rootMargin: `-${getScrollOffset()}px 0px -55% 0px`, - threshold: [0, 0.25, 0.5, 0.75, 1], - } - ); - - sections.forEach((section) => observer.observe(section)); - } - - if (document.readyState === "loading") { - document.addEventListener("DOMContentLoaded", initApplicationPage); - } else { - initApplicationPage(); - } -})(); diff --git a/app/templates/base/downloadAppDialog.html b/app/templates/base/downloadAppDialog.html index 812bddd..256daef 100644 --- a/app/templates/base/downloadAppDialog.html +++ b/app/templates/base/downloadAppDialog.html @@ -8,8 +8,8 @@