Files
climperor/web/frontend/index.html
T
vosonandCursor cafd0651b1 Fix player sync empty overwrites and force CSS cache refresh.
Keep D1 recent/heroes/peers/rank when OpenDota is partial; bump site to 0.6.55 and shorten style.css cache so「我」layout is not stuck on stale CSS.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-01 01:46:13 +08:00

264 lines
12 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>DOTA2 上分帝 — 英雄克制 / 搭档 / 走势 / 机制</title>
<meta
name="description"
content="上分帝(Climperor):Dota 2 英雄机制克制与搭档、段位走势、机制查询、物品与版本更新。定性关系理由 + 公开数据走势,助你上分。"
/>
<meta name="keywords" content="DOTA2,上分帝,Climperor,英雄克制,搭档,胜率走势,机制查询,驱散,版本更新" />
<link rel="canonical" href="https://dota2.refining.dev/" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="上分帝" />
<meta property="og:locale" content="zh_CN" />
<meta property="og:title" content="DOTA2 上分帝 — 英雄克制 / 搭档 / 走势 / 机制" />
<meta
property="og:description"
content="Dota 2 英雄机制克制与搭档、段位走势、机制查询、物品与版本更新。"
/>
<meta property="og:url" content="https://dota2.refining.dev/" />
<meta property="og:image" content="https://climperor.oss-cn-shanghai.aliyuncs.com/ui-icon/dota2_logo_wordmark.png" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="DOTA2 上分帝" />
<meta
name="twitter:description"
content="Dota 2 英雄机制克制与搭档、段位走势、机制查询、物品与版本更新。"
/>
<script type="application/ld+json" id="seo-jsonld">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "上分帝",
"alternateName": ["Climperor", "DOTA2 上分帝"],
"url": "https://dota2.refining.dev/",
"inLanguage": "zh-CN",
"description": "Dota 2 英雄机制克制与搭档、段位走势、机制查询、物品与版本更新。",
"potentialAction": {
"@type": "SearchAction",
"target": "https://dota2.refining.dev/heroes?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
</script>
<link rel="icon" href="/ui-icon/dota2_logo.png" type="image/png" />
<link rel="stylesheet" href="/style.css?v=0.6.55" />
<script src="/mobile-gate.js?v=0.6.55"></script>
</head>
<body>
<h1 class="sr-only">DOTA2 上分帝</h1>
<aside id="seo-prerender" class="seo-prerender">
<p>
上分帝(Climperor)是面向 Dota 2 的选将与机制参考站:浏览英雄克制与搭档理由、
段位走势、机制查询(驱散与控制)、物品商店与版本更新。请使用桌面浏览器访问完整交互界面。
</p>
<ul>
<li><a href="/heroes">英雄克制与搭档</a></li>
<li><a href="/mechanics">机制查询</a></li>
<li><a href="/trends">近 8 周走势</a></li>
<li><a href="/items">物品商店</a></li>
<li><a href="/patches">版本更新</a></li>
<li><a href="/rankings">Immortal 排行</a></li>
<li><a href="/streamers">主播</a></li>
<li><a href="/matches">明星比赛</a></li>
<li><a href="/players">玩家战绩</a></li>
</ul>
</aside>
<div id="mobile-gate" class="mobile-gate" role="dialog" aria-labelledby="mobile-gate-title" aria-modal="true">
<div class="mobile-gate-card">
<div class="mobile-gate-brand" aria-hidden="true">
<img class="mobile-gate-logo" src="/ui-icon/dota2_logo_wordmark.png" alt="" />
<span class="mobile-gate-brand-title">上分帝</span>
</div>
<h2 id="mobile-gate-title" class="mobile-gate-title">暂不支持移动端</h2>
<p class="mobile-gate-desc">请从 PC 端浏览器访问本站。</p>
<button type="button" id="mobile-demand-btn" class="mobile-demand-btn">催更移动端</button>
<p id="mobile-demand-count" class="mobile-demand-count" hidden>
已有 <span id="mobile-demand-count-n">0</span> 人希望开通
</p>
</div>
</div>
<header class="topbar">
<div class="topbar-primary">
<div class="brand" aria-label="Dota 2 上分帝">
<img class="brand-logo" src="/ui-icon/dota2_logo_wordmark.png" alt="Dota 2" />
<span class="brand-title">上分帝</span>
</div>
<nav class="main-tabs" aria-label="主分页">
<button type="button" class="main-tab hidden" data-page="home" id="tab-home"></button>
<button type="button" class="main-tab active" data-page="heroes">英雄</button>
<button type="button" class="main-tab" data-page="rankings">排行</button>
<button type="button" class="main-tab" data-page="streamers">主播</button>
<button type="button" class="main-tab" data-page="matches">比赛</button>
<button type="button" class="main-tab" data-page="trends">走势</button>
<button type="button" class="main-tab" data-page="mechanics">机制</button>
<button type="button" class="main-tab" data-page="items">物品</button>
<button type="button" class="main-tab" data-page="patches">版本</button>
</nav>
<div class="topbar-tools">
<input id="q" class="search" type="search" placeholder="搜索英雄或别名" autocomplete="off" spellcheck="false" aria-label="搜索英雄" />
<input id="q-item" class="search search-inline hidden" type="search" placeholder="搜索物品" autocomplete="off" spellcheck="false" aria-label="搜索物品" />
<div class="auth-box" id="auth-box">
<a class="steam-login-btn" id="steam-login-btn" href="/api/auth/steam">Steam 登录</a>
<div class="auth-user hidden" id="auth-user">
<img class="auth-avatar" id="auth-avatar" alt="" width="28" height="28" />
<span class="auth-name" id="auth-name"></span>
<button type="button" class="auth-logout" id="auth-logout" title="退出登录">退出</button>
</div>
</div>
<a
class="contact-mail"
href="mailto:c9mhs8vfmuyv@outlook.com"
aria-label="邮件联系"
title="c9mhs8vfmuyv@outlook.com"
>
<svg class="contact-mail-icon" viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" focusable="false">
<path fill="currentColor" d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z"/>
</svg>
</a>
</div>
</div>
</header>
<main id="heroes-view" class="board">
<div class="columns" id="columns"></div>
</main>
<div id="heroes-toolbar" class="toolbar hero-role-toolbar">
<div class="tagbar" id="tagbar" aria-label="英雄定位筛选"></div>
</div>
<main id="rankings-view" class="board rankings-board hidden">
<div class="rankings-cluster">
<div class="rankings-center-wrap">
<div class="rankings-body" id="rankings-body"></div>
<aside class="rankings-aside" aria-label="排行筛选">
<h2 class="rankings-title page-title">
<span class="rankings-title-row">
<span class="rankings-kicker" id="rankings-kicker">Immortal 排行榜</span>
<span id="rankings-tip-slot"></span>
</span>
</h2>
<div class="rankings-regions" id="rankings-regions" role="tablist" aria-label="选择地区"></div>
<p class="rankings-sub page-sub" id="rankings-sub"></p>
</aside>
</div>
</div>
</main>
<main id="matches-view" class="board rankings-board matches-board hidden">
<div class="rankings-cluster">
<div class="rankings-center-wrap matches-center-wrap">
<div class="rankings-body matches-body" id="matches-body"></div>
<aside class="rankings-aside" aria-label="比赛筛选">
<h2 class="rankings-title page-title">
<span class="rankings-title-row">
<span class="rankings-kicker" id="matches-kicker">明星比赛</span>
</span>
</h2>
<div class="matches-origins" id="matches-origins" role="tablist" aria-label="职业或国服"></div>
<div class="matches-players" id="matches-players" role="tablist" aria-label="选择选手"></div>
</aside>
</div>
</div>
</main>
<main id="players-view" class="board rankings-board players-board hidden">
<div class="players-cluster">
<div class="players-body" id="players-body" aria-live="polite"></div>
</div>
</main>
<main id="streamers-view" class="board rankings-board streamers-board hidden">
<div class="rankings-cluster">
<div class="rankings-center-wrap streamers-center-wrap">
<div class="rankings-body streamers-body" id="streamers-body"></div>
<footer class="streamers-foot" id="streamers-foot" aria-hidden="true"></footer>
</div>
</div>
</main>
<main id="trends-view" class="board rankings-board trends-board hidden">
<div class="rankings-cluster">
<div class="rankings-center-wrap trends-center-wrap">
<div class="rankings-body" id="trends-body"></div>
<aside class="rankings-aside" aria-label="走势筛选">
<h2 class="rankings-title page-title">
<span class="rankings-title-row">
<span class="rankings-kicker" id="trends-kicker">过去 8 周走势</span>
</span>
</h2>
<div class="trends-brackets" id="trends-brackets" aria-label="选择段位"></div>
<div class="trends-sort" id="trends-sort" role="tablist" aria-label="排序"></div>
<p class="rankings-sub page-sub" id="trends-sub"></p>
</aside>
</div>
</div>
</main>
<main id="mechanics-view" class="board rankings-board mechanics-board hidden">
<div class="rankings-cluster">
<div class="rankings-center-wrap mechanics-center-wrap">
<div class="rankings-body mechanics-body" id="mechanics-body"></div>
<aside class="rankings-aside" aria-label="机制筛选">
<h2 class="rankings-title page-title">
<span class="rankings-title-row">
<span class="rankings-kicker">机制查询</span>
</span>
</h2>
<div class="mechanics-effects" id="mechanics-effects" aria-label="选择状态效果"></div>
</aside>
</div>
</div>
</main>
<main id="items-view" class="board items-board hidden">
<div class="items-cluster">
<div class="items-main">
<header class="page-header items-page-header">
<h2 class="page-title">物品商店</h2>
<p class="page-sub">基础 / 合成分类目录</p>
</header>
<div class="shop-col-headers" aria-hidden="true">
<span class="shop-col-header basic">基础分类</span>
<span class="shop-col-header upgraded">合成分类</span>
</div>
<div id="item-shop" class="item-shop" aria-live="polite"></div>
</div>
<aside id="item-detail-box" class="item-detail-box empty" aria-live="polite">
点击物品查看详情与合成
</aside>
</div>
</main>
<main id="patches-view" class="board patches-board hidden">
<div class="patches-cluster">
<div class="patches-center-wrap">
<div class="patches-main">
<div class="patches-header">
<h2 class="patches-title">
<span class="patches-kicker page-kicker">游戏性更新</span>
<span class="patches-ver" id="patch-ver"></span>
</h2>
<select id="patch-select" aria-label="选择版本"></select>
</div>
<div class="patches-detail" id="patches-detail"></div>
</div>
<aside class="patches-aside" id="patches-aside" hidden></aside>
</div>
</div>
</main>
<div id="detail-drawer" class="detail-drawer is-collapsed hidden" aria-hidden="true">
<section class="detail detail-drawer-panel" id="detail" role="dialog" aria-modal="true" aria-live="polite"></section>
</div>
<footer class="heroes-site-foot" id="heroes-site-foot" aria-hidden="true"></footer>
<script src="/config.js?v=0.6.55"></script>
<script src="/router.js?v=0.6.55"></script>
<script src="/app.js?v=0.6.55"></script>
</body>
</html>