diff --git a/internal/jikan/seasons.go b/internal/jikan/seasons.go index d928a97..818ec27 100644 --- a/internal/jikan/seasons.go +++ b/internal/jikan/seasons.go @@ -13,7 +13,7 @@ type ScheduleResult struct { func (c *Client) GetSchedule(day string) (ScheduleResult, error) { day = strings.ToLower(day) - cacheKey := fmt.Sprintf("schedule_%s", day) + cacheKey := fmt.Sprintf("schedule_limit24_%s", day) var cached ScheduleResult if c.getCache(cacheKey, &cached) { @@ -21,7 +21,7 @@ func (c *Client) GetSchedule(day string) (ScheduleResult, error) { } var result TopAnimeResponse - reqURL := fmt.Sprintf("%s/schedules?filter=%s&sfw=true", c.baseURL, day) + reqURL := fmt.Sprintf("%s/schedules?filter=%s&sfw=true&limit=24", c.baseURL, day) if err := c.fetchWithRetry(reqURL, &result); err != nil { return ScheduleResult{}, err } @@ -54,14 +54,14 @@ func (c *Client) GetSeasonsNow(page int) (TopAnimeResult, error) { if page < 1 { page = 1 } - cacheKey := fmt.Sprintf("seasons_now:%d", page) + cacheKey := fmt.Sprintf("seasons_now_limit24:%d", page) var cached TopAnimeResult if c.getCache(cacheKey, &cached) { return cached, nil } var result TopAnimeResponse - reqURL := fmt.Sprintf("%s/seasons/now?page=%d", c.baseURL, page) + reqURL := fmt.Sprintf("%s/seasons/now?limit=24&page=%d", c.baseURL, page) if err := c.fetchWithRetry(reqURL, &result); err != nil { return TopAnimeResult{}, err } @@ -79,14 +79,14 @@ func (c *Client) GetSeasonsUpcoming(page int) (TopAnimeResult, error) { if page < 1 { page = 1 } - cacheKey := fmt.Sprintf("seasons_upcoming:%d", page) + cacheKey := fmt.Sprintf("seasons_upcoming_limit24:%d", page) var cached TopAnimeResult if c.getCache(cacheKey, &cached) { return cached, nil } var result TopAnimeResponse - reqURL := fmt.Sprintf("%s/seasons/upcoming?page=%d", c.baseURL, page) + reqURL := fmt.Sprintf("%s/seasons/upcoming?limit=24&page=%d", c.baseURL, page) if err := c.fetchWithRetry(reqURL, &result); err != nil { return TopAnimeResult{}, err } diff --git a/static/css/style.css b/static/css/style.css index 8c860fa..0b8068d 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -160,17 +160,18 @@ header { .search-input { background: var(--surface); - border: 1px solid var(--border); + border: none; color: var(--text); - padding: var(--space-sm) var(--space-md); + padding: var(--space-md) var(--space-xl); font-size: var(--text-md); width: clamp(200px, 25vw + 80px, 400px); font-family: inherit; + border-radius: 0; } .search-input:focus { outline: none; - border-color: var(--text-muted); + background: var(--surface-hover); } .search-input:focus+.search-dropdown { @@ -206,14 +207,14 @@ header { font-weight: 600; color: var(--text-muted); text-transform: uppercase; - border-bottom: 1px solid var(--border); + border-bottom: none; } .search-result-item { display: flex; gap: var(--space-md); padding: var(--space-md) var(--space-lg); - border-bottom: 1px solid var(--border); + border-bottom: none; text-decoration: none; color: inherit; transition: background 0.15s; @@ -230,6 +231,8 @@ header { object-fit: cover; flex-shrink: 0; transition: opacity 0.2s ease; + background: var(--surface); + animation: pulse-bg 2s ease-in-out infinite; } .search-result-item:hover .search-result-thumb { @@ -244,7 +247,7 @@ header { justify-content: center; background-color: var(--surface-hover); background-image: repeating-linear-gradient(45deg, var(--border) 0, var(--border) 1px, transparent 1px, transparent 6px); - border: 1px solid var(--border); + border: none; font-size: 0; color: transparent; flex-shrink: 0; @@ -286,13 +289,15 @@ header { text-align: center; color: var(--link); font-size: var(--text-base); - border-top: 1px solid var(--border); + border-top: none; text-decoration: none; + background: var(--surface-hover); } .search-result-view-all:hover { - background: var(--surface-hover); - text-decoration: underline; + background: var(--surface); + text-decoration: none; + color: var(--text); } /* Main */ @@ -379,7 +384,7 @@ a:visited { font-size: 0; background-color: var(--surface); background-image: repeating-linear-gradient(45deg, var(--border) 0, var(--border) 1px, transparent 1px, transparent 8px); - border: 1px solid var(--border); + border: none; user-select: none; } @@ -484,8 +489,8 @@ a.htmx-request { .login-container { max-width: clamp(260px, 20vw + 180px, 360px); margin: var(--space-2xl) auto; - border: 1px solid var(--border); - padding: var(--space-lg); + border: none; + padding: var(--space-2xl); background: var(--surface); } @@ -520,9 +525,9 @@ a.htmx-request { } .form-group input { - padding: var(--space-sm) var(--space-md); - background: var(--surface); - border: 1px solid var(--border); + padding: var(--space-md) var(--space-lg); + background: var(--bg); + border: none; color: var(--text); font-size: var(--text-md); font-family: inherit; @@ -530,7 +535,7 @@ a.htmx-request { .form-group input:focus { outline: none; - border-color: var(--link); + background: var(--surface-hover); } .login-button { @@ -588,14 +593,14 @@ a.htmx-request { .view-toggle { display: flex; - border: 1px solid var(--border); + border: none; } .view-toggle a { padding: var(--space-xs) var(--space-md); font-size: var(--text-base); color: var(--link); - border-right: 1px solid var(--border); + border-right: none; text-decoration: none; } @@ -653,7 +658,7 @@ a.htmx-request { align-items: center; justify-content: center; background: var(--surface); - border: 1px solid var(--border); + border: none; color: var(--text-muted); cursor: pointer; font-size: var(--text-base); @@ -678,22 +683,25 @@ a.htmx-request { .watchlist-table { width: 100%; border-collapse: collapse; - border: 1px solid var(--border); + border: none; } .watchlist-table th { text-align: left; padding: var(--space-md) var(--space-lg); - font-size: var(--text-base); + font-size: var(--text-xs); font-weight: 600; - color: var(--text); - border-bottom: 1px solid var(--border); - background: var(--surface-hover); + color: var(--text-muted); + border-bottom: none; + background: var(--surface); + text-transform: uppercase; + letter-spacing: 0.05em; + font-family: var(--font-mono); } .watchlist-table td { padding: var(--space-md) var(--space-lg); - border-bottom: 1px solid var(--border); + border-bottom: 2px solid var(--bg); vertical-align: middle; font-size: var(--text-md); } @@ -706,7 +714,9 @@ a.htmx-request { width: var(--table-thumb); aspect-ratio: 2/3; object-fit: cover; - border: 1px solid var(--border); + border: none; + background: var(--surface); + animation: pulse-bg 2s ease-in-out infinite; } .watchlist-table .title-cell { @@ -758,7 +768,9 @@ a.htmx-request { .anime-poster img { width: 100%; - border: 1px solid var(--border); + border: none; + background: var(--surface); + animation: pulse-bg 2s ease-in-out infinite; } .anime-info { @@ -858,6 +870,8 @@ a.htmx-request { aspect-ratio: 2/3; object-fit: cover; transition: opacity 0.2s ease; + background: var(--surface); + animation: pulse-bg 2s ease-in-out infinite; } .relation-card:hover .relation-thumb { @@ -887,7 +901,7 @@ a.htmx-request { column-gap: var(--space-md); padding: var(--space-lg); background: var(--surface); - border: 1px solid var(--border); + border: none; height: fit-content; } @@ -969,10 +983,10 @@ a.htmx-request { right: 0; min-width: clamp(140px, 12vw + 80px, 200px); background: var(--surface); - border: 1px solid var(--border); + border: none; display: none; z-index: 50; - margin-top: -1px; + margin-top: 0; } .dropdown.open .dropdown-menu { @@ -1030,7 +1044,7 @@ a.htmx-request { margin-bottom: var(--space-lg); padding: var(--space-lg); background: var(--surface); - border: 1px solid var(--border); + border: none; } .sort-filter-group { @@ -1047,7 +1061,7 @@ a.htmx-request { .sort-filter-select { background: var(--surface); - border: 1px solid var(--border); + border: none; color: var(--text); padding: var(--space-sm) var(--space-md); font-size: var(--text-base); @@ -1057,7 +1071,7 @@ a.htmx-request { .sort-filter-select:focus { outline: none; - border-color: var(--link); + background: var(--surface-hover); } /* Responsive */ @@ -1248,9 +1262,10 @@ a.htmx-request { .schedule-card-image { aspect-ratio: 2/3; - background: var(--bg); + background: var(--surface); overflow: hidden; transition: opacity 0.2s ease; + animation: pulse-bg 2s ease-in-out infinite; } .schedule-card:hover .schedule-card-image { @@ -1374,10 +1389,11 @@ a.htmx-request { .notification-image { aspect-ratio: 2/3; - background: var(--bg); + background: var(--surface); overflow: hidden; display: block; transition: opacity 0.2s ease; + animation: pulse-bg 2s ease-in-out infinite; } .notification-card:hover .notification-image { @@ -1385,24 +1401,20 @@ a.htmx-request { } .notification-card:hover { - border-color: var(--link); transform: translateY(-2px); text-decoration: none; color: var(--text); } -.notification-image { - aspect-ratio: 2/3; - background: var(--bg); - overflow: hidden; - display: block; -} - .notification-image img { width: 100%; height: 100%; object-fit: cover; } + width: 100%; + height: 100%; + object-fit: cover; +} .notification-content { padding: var(--space-md);