feat: add score report links and estimation warnings
This commit is contained in:
@@ -69,6 +69,13 @@
|
|||||||
<a href="#/analysis" aria-current={currentPath.startsWith('/analysis') ? 'page' : undefined}>배치 분석</a>
|
<a href="#/analysis" aria-current={currentPath.startsWith('/analysis') ? 'page' : undefined}>배치 분석</a>
|
||||||
<a href="#/combination" aria-current={currentPath.startsWith('/combination') ? 'page' : undefined}>조합 탐색</a>
|
<a href="#/combination" aria-current={currentPath.startsWith('/combination') ? 'page' : undefined}>조합 탐색</a>
|
||||||
<a href="#/data" aria-current={currentPath.startsWith('/data') ? 'page' : undefined}>사용자 데이터</a>
|
<a href="#/data" aria-current={currentPath.startsWith('/data') ? 'page' : undefined}>사용자 데이터</a>
|
||||||
|
<a
|
||||||
|
class="report-link"
|
||||||
|
href="https://docs.google.com/forms/d/1bShzsxNN-iTk0uU3RfMfmLkYXYmUTmIWMmCtQmfl_Ik"
|
||||||
|
target="_blank"
|
||||||
|
rel="noreferrer"
|
||||||
|
aria-label="실측값 제보 Google 폼을 새 탭에서 열기"
|
||||||
|
>실측값 제보 <span aria-hidden="true">↗</span></a>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -92,6 +99,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
gap: 10px;
|
||||||
width: min(var(--page-max-width), calc(100% - var(--page-gutter)));
|
width: min(var(--page-max-width), calc(100% - var(--page-gutter)));
|
||||||
min-height: 62px;
|
min-height: 62px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
@@ -105,23 +113,31 @@
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav { display: flex; align-items: center; gap: 4px; }
|
nav { display: flex; min-width: 0; flex: 1; align-items: center; justify-content: flex-end; gap: 4px; overflow-x: auto; scrollbar-width: none; }
|
||||||
|
nav::-webkit-scrollbar { display: none; }
|
||||||
nav a {
|
nav a {
|
||||||
|
flex: 0 0 auto;
|
||||||
padding: 8px 12px;
|
padding: 8px 12px;
|
||||||
border-radius: 9px;
|
border-radius: 9px;
|
||||||
color: #929cad;
|
color: #929cad;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-weight: 750;
|
font-weight: 750;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
nav a:hover { color: #e2e6ed; background: rgb(255 255 255 / 5%); }
|
nav a:hover { color: #e2e6ed; background: rgb(255 255 255 / 5%); }
|
||||||
nav a[aria-current='page'] { color: #f1a1c3; background: rgb(239 139 182 / 12%); }
|
nav a[aria-current='page'] { color: #f1a1c3; background: rgb(239 139 182 / 12%); }
|
||||||
|
.report-link { flex: 0 0 auto; padding: 8px 12px; border: 1px solid #ef8bb6; border-radius: 9px; color: #21121a; background: linear-gradient(135deg, #f3a3c5, #e77ead); box-shadow: 0 0 18px rgb(239 139 182 / 18%); font-size: 13px; font-weight: 800; text-decoration: none; white-space: nowrap; }
|
||||||
|
.report-link:hover { color: #160d12; background: linear-gradient(135deg, #f8bad3, #ee94ba); box-shadow: 0 0 22px rgb(239 139 182 / 30%); }
|
||||||
|
.report-link span { margin-left: 2px; font-size: 11px; }
|
||||||
a:focus-visible { outline: 3px solid rgb(239 139 182 / 28%); outline-offset: 2px; }
|
a:focus-visible { outline: 3px solid rgb(239 139 182 / 28%); outline-offset: 2px; }
|
||||||
|
|
||||||
@media (max-width: 560px) {
|
@media (max-width: 560px) {
|
||||||
:global(:root) { --page-gutter: 24px; }
|
:global(:root) { --page-gutter: 24px; }
|
||||||
.nav-inner { width: calc(100% - 24px); min-height: 54px; }
|
.nav-inner { width: calc(100% - 24px); min-height: 54px; }
|
||||||
.brand { font-size: 15px; }
|
.brand { font-size: 13px; }
|
||||||
nav a { padding: 7px 9px; font-size: 14px; }
|
nav { gap: 2px; }
|
||||||
|
nav a { padding: 7px 7px; font-size: 12px; }
|
||||||
|
.report-link { padding: 7px 8px; font-size: 12px; }
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
- 점수 계수가 보정된 채보와 복수 기수 카드의 보드 보너스는 이전 버전과 계산 결과가 달라질 수 있습니다.
|
- 점수 계수가 보정된 채보와 복수 기수 카드의 보드 보너스는 이전 버전과 계산 결과가 달라질 수 있습니다.
|
||||||
- 현재 실측 점수 계수가 등록된 채보는 일부입니다. 계산 정확도 향상을 위해 대부분의 악곡에서 실측값 제보가 필요합니다.
|
- 현재 실측 점수 계수가 등록된 채보는 일부입니다. 계산 정확도 향상을 위해 대부분의 악곡에서 실측값 제보가 필요합니다.
|
||||||
- 실측값 제보: `[제보 링크 입력]`
|
- 실측값 제보: [Google Form](https://docs.google.com/forms/d/1bShzsxNN-iTk0uU3RfMfmLkYXYmUTmIWMmCtQmfl_Ik)
|
||||||
- 연결 카드 최적화는 결과를 확인한 뒤 적용할 때만 사용자 데이터의 배치를 변경하며, 적용 직후에는 이전 배치로 복원할 수 있습니다.
|
- 연결 카드 최적화는 결과를 확인한 뒤 적용할 때만 사용자 데이터의 배치를 변경하며, 적용 직후에는 이전 배치로 복원할 수 있습니다.
|
||||||
|
|
||||||
## 다운로드
|
## 다운로드
|
||||||
|
|||||||
@@ -11,6 +11,13 @@
|
|||||||
<a href="/analysis" aria-current={$page.url.pathname.startsWith('/analysis') ? 'page' : undefined}>배치 분석</a>
|
<a href="/analysis" aria-current={$page.url.pathname.startsWith('/analysis') ? 'page' : undefined}>배치 분석</a>
|
||||||
<a href="/combination" aria-current={$page.url.pathname.startsWith('/combination') ? 'page' : undefined}>조합 탐색</a>
|
<a href="/combination" aria-current={$page.url.pathname.startsWith('/combination') ? 'page' : undefined}>조합 탐색</a>
|
||||||
<a href="/data" aria-current={$page.url.pathname.startsWith('/data') ? 'page' : undefined}>사용자 데이터</a>
|
<a href="/data" aria-current={$page.url.pathname.startsWith('/data') ? 'page' : undefined}>사용자 데이터</a>
|
||||||
|
<a
|
||||||
|
class="report-link"
|
||||||
|
href="https://docs.google.com/forms/d/1bShzsxNN-iTk0uU3RfMfmLkYXYmUTmIWMmCtQmfl_Ik"
|
||||||
|
target="_blank"
|
||||||
|
rel="noreferrer"
|
||||||
|
aria-label="실측값 제보 Google 폼을 새 탭에서 열기"
|
||||||
|
>실측값 제보 <span aria-hidden="true">↗</span></a>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -34,6 +41,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
gap: 10px;
|
||||||
width: min(var(--page-max-width), calc(100% - var(--page-gutter)));
|
width: min(var(--page-max-width), calc(100% - var(--page-gutter)));
|
||||||
min-height: 62px;
|
min-height: 62px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
@@ -47,25 +55,33 @@
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav { display: flex; align-items: center; gap: 4px; }
|
nav { display: flex; min-width: 0; flex: 1; align-items: center; justify-content: flex-end; gap: 4px; overflow-x: auto; scrollbar-width: none; }
|
||||||
|
nav::-webkit-scrollbar { display: none; }
|
||||||
|
|
||||||
nav a {
|
nav a {
|
||||||
|
flex: 0 0 auto;
|
||||||
padding: 8px 12px;
|
padding: 8px 12px;
|
||||||
border-radius: 9px;
|
border-radius: 9px;
|
||||||
color: #929cad;
|
color: #929cad;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-weight: 750;
|
font-weight: 750;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav a:hover { color: #e2e6ed; background: rgb(255 255 255 / 5%); }
|
nav a:hover { color: #e2e6ed; background: rgb(255 255 255 / 5%); }
|
||||||
nav a[aria-current='page'] { color: #f1a1c3; background: rgb(239 139 182 / 12%); }
|
nav a[aria-current='page'] { color: #f1a1c3; background: rgb(239 139 182 / 12%); }
|
||||||
|
.report-link { flex: 0 0 auto; padding: 8px 12px; border: 1px solid #ef8bb6; border-radius: 9px; color: #21121a; background: linear-gradient(135deg, #f3a3c5, #e77ead); box-shadow: 0 0 18px rgb(239 139 182 / 18%); font-size: 13px; font-weight: 800; text-decoration: none; white-space: nowrap; }
|
||||||
|
.report-link:hover { color: #160d12; background: linear-gradient(135deg, #f8bad3, #ee94ba); box-shadow: 0 0 22px rgb(239 139 182 / 30%); }
|
||||||
|
.report-link span { margin-left: 2px; font-size: 11px; }
|
||||||
a:focus-visible { outline: 3px solid rgb(239 139 182 / 28%); outline-offset: 2px; }
|
a:focus-visible { outline: 3px solid rgb(239 139 182 / 28%); outline-offset: 2px; }
|
||||||
|
|
||||||
@media (max-width: 560px) {
|
@media (max-width: 560px) {
|
||||||
:global(:root) { --page-gutter: 24px; }
|
:global(:root) { --page-gutter: 24px; }
|
||||||
.nav-inner { width: calc(100% - 24px); min-height: 54px; }
|
.nav-inner { width: calc(100% - 24px); min-height: 54px; }
|
||||||
.brand { font-size: 15px; }
|
.brand { font-size: 13px; }
|
||||||
nav a { padding: 7px 9px; font-size: 14px; }
|
nav { gap: 2px; }
|
||||||
|
nav a { padding: 7px 7px; font-size: 12px; }
|
||||||
|
.report-link { padding: 7px 8px; font-size: 12px; }
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -768,6 +768,9 @@
|
|||||||
<div>
|
<div>
|
||||||
<h1>배치 분석</h1>
|
<h1>배치 분석</h1>
|
||||||
<p class="page-description">특정 악곡과 카드 조합에서 최고 점수를 낼 수 있는 스페셜 발동 순서와 빈도 감소 조합을 찾습니다.</p>
|
<p class="page-description">특정 악곡과 카드 조합에서 최고 점수를 낼 수 있는 스페셜 발동 순서와 빈도 감소 조합을 찾습니다.</p>
|
||||||
|
{#if selectedChart && selectedChart.scoreCalibrationSource !== 'measured'}
|
||||||
|
<p class="calibration-warning" role="status"><strong>추정 점수 안내</strong> 이 악곡의 점수 계수는 실측값이 아니므로 실제 점수와 오차가 크게 발생할 수 있습니다.</p>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
@@ -1017,6 +1020,8 @@
|
|||||||
.page-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin-bottom: var(--page-header-bottom); }
|
.page-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin-bottom: var(--page-header-bottom); }
|
||||||
h1 { margin: 0; color: #f3f5f8; font-size: var(--page-title-size); line-height: 1.15; letter-spacing: -.045em; }
|
h1 { margin: 0; color: #f3f5f8; font-size: var(--page-title-size); line-height: 1.15; letter-spacing: -.045em; }
|
||||||
.page-description { margin: 10px 0 0; color: #929cab; font-size: var(--page-description-size); line-height: 1.6; }
|
.page-description { margin: 10px 0 0; color: #929cab; font-size: var(--page-description-size); line-height: 1.6; }
|
||||||
|
.calibration-warning { width: fit-content; margin: 10px 0 0; padding: 8px 11px; border: 1px solid #604653; border-radius: 8px; color: #c8aeb9; background: #261d23; font-size: 13px; line-height: 1.55; }
|
||||||
|
.calibration-warning strong { margin-right: 5px; color: #f1a3c4; }
|
||||||
.panel { margin-top: 16px; padding: 24px; border: 1px solid #2a303a; border-radius: 16px; background: #171b22; }
|
.panel { margin-top: 16px; padding: 24px; border: 1px solid #2a303a; border-radius: 16px; background: #171b22; }
|
||||||
.section-title, .section-title > div { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
|
.section-title, .section-title > div { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
|
||||||
.section-title > div { justify-content: flex-start; }
|
.section-title > div { justify-content: flex-start; }
|
||||||
|
|||||||
@@ -1007,6 +1007,9 @@
|
|||||||
<header>
|
<header>
|
||||||
<h1>조합 탐색</h1>
|
<h1>조합 탐색</h1>
|
||||||
<p class="page-description">악곡과 고정 멤버 조건을 바탕으로 최고 점수 조합과 스페셜 발동 순서를 함께 찾습니다.</p>
|
<p class="page-description">악곡과 고정 멤버 조건을 바탕으로 최고 점수 조합과 스페셜 발동 순서를 함께 찾습니다.</p>
|
||||||
|
{#if selectedChart && selectedChart.scoreCalibrationSource !== 'measured'}
|
||||||
|
<p class="calibration-warning" role="status"><strong>추정 점수 안내</strong> 이 악곡의 점수 계수는 실측값이 아니므로 실제 점수와 오차가 크게 발생할 수 있습니다.</p>
|
||||||
|
{/if}
|
||||||
<p class="baseline-guide"><strong>기준 조합</strong>은 배치 분석 결과가 저장되어 있고, 저장된 악곡과 난이도가 현재 탐색 조건과 같을 때 표시됩니다.</p>
|
<p class="baseline-guide"><strong>기준 조합</strong>은 배치 분석 결과가 저장되어 있고, 저장된 악곡과 난이도가 현재 탐색 조건과 같을 때 표시됩니다.</p>
|
||||||
</header>
|
</header>
|
||||||
{#if baselineState && baselineMatchesConditions}
|
{#if baselineState && baselineMatchesConditions}
|
||||||
@@ -1184,6 +1187,8 @@
|
|||||||
header { margin-bottom: var(--page-header-bottom); }
|
header { margin-bottom: var(--page-header-bottom); }
|
||||||
h1 { margin: 0; color: #f3f5f8; font-size: var(--page-title-size); line-height: 1.15; letter-spacing: -.045em; }
|
h1 { margin: 0; color: #f3f5f8; font-size: var(--page-title-size); line-height: 1.15; letter-spacing: -.045em; }
|
||||||
.page-description { margin: 10px 0 0; color: #929cab; font-size: var(--page-description-size); line-height: 1.6; }
|
.page-description { margin: 10px 0 0; color: #929cab; font-size: var(--page-description-size); line-height: 1.6; }
|
||||||
|
.calibration-warning { width: fit-content; margin: 10px 0 0; padding: 8px 11px; border: 1px solid #604653; border-radius: 8px; color: #c8aeb9; background: #261d23; font-size: 13px; line-height: 1.55; }
|
||||||
|
.calibration-warning strong { margin-right: 5px; color: #f1a3c4; }
|
||||||
.baseline-guide { width: fit-content; margin: 10px 0 0; padding: 8px 11px; border-radius: 8px; color: #8d96a5; background: #1b2029; font-size: 13px; line-height: 1.55; }
|
.baseline-guide { width: fit-content; margin: 10px 0 0; padding: 8px 11px; border-radius: 8px; color: #8d96a5; background: #1b2029; font-size: 13px; line-height: 1.55; }
|
||||||
.baseline-guide strong { color: #dba0b9; }
|
.baseline-guide strong { color: #dba0b9; }
|
||||||
.panel { margin-top: 16px; padding: 24px; border: 1px solid #2a303a; border-radius: 16px; background: #171b22; }
|
.panel { margin-top: 16px; padding: 24px; border: 1px solid #2a303a; border-radius: 16px; background: #171b22; }
|
||||||
@@ -1202,9 +1207,9 @@
|
|||||||
label { display: grid; gap: 7px; color: #8f98a8; font-size: 14px; font-weight: 750; }
|
label { display: grid; gap: 7px; color: #8f98a8; font-size: 14px; font-weight: 750; }
|
||||||
select, .number-input { width: 100%; min-width: 0; height: 42px; padding: 0 12px; border: 1px solid #343c49; border-radius: 9px; color: #e8ebf1; background: #11151b; font: inherit; }
|
select, .number-input { width: 100%; min-width: 0; height: 42px; padding: 0 12px; border: 1px solid #343c49; border-radius: 9px; color: #e8ebf1; background: #11151b; font: inherit; }
|
||||||
select:focus, .number-input:focus, .generation-input:focus { border-color: #d86f9c; outline: 3px solid rgb(216 111 156 / 14%); }
|
select:focus, .number-input:focus, .generation-input:focus { border-color: #d86f9c; outline: 3px solid rgb(216 111 156 / 14%); }
|
||||||
.song-fields { display: grid; grid-template-columns: minmax(0, 4fr) clamp(110px, 11vw, 170px) minmax(220px, .8fr); align-items: start; gap: 12px; margin-top: 22px; }
|
.song-fields { display: grid; grid-template-columns: minmax(0, 1fr) clamp(110px, 11vw, 170px); align-items: start; gap: 12px; margin-top: 22px; }
|
||||||
.song-picker-field { min-width: 0; }
|
.song-picker-field { min-width: 0; }
|
||||||
.chart-meta { display: flex; align-items: center; gap: 8px; height: 42px; margin-top: 25px; }
|
.chart-meta { display: flex; grid-column: 1 / -1; flex-wrap: wrap; align-items: center; gap: 8px; min-height: 42px; }
|
||||||
.chart-meta span { padding: 7px 9px; border-radius: 7px; color: #adb5c2; background: #202631; font-size: 13px; white-space: nowrap; }
|
.chart-meta span { padding: 7px 9px; border-radius: 7px; color: #adb5c2; background: #202631; font-size: 13px; white-space: nowrap; }
|
||||||
.candidate-fields { display: grid; grid-template-columns: clamp(130px, 12vw, 180px) clamp(260px, 24vw, 380px); gap: 9px; margin-top: 18px; }
|
.candidate-fields { display: grid; grid-template-columns: clamp(130px, 12vw, 180px) clamp(260px, 24vw, 380px); gap: 9px; margin-top: 18px; }
|
||||||
.candidate-awakening { display: grid; gap: 7px; color: #8f98a8; font-size: 14px; font-weight: 750; }
|
.candidate-awakening { display: grid; gap: 7px; color: #8f98a8; font-size: 14px; font-weight: 750; }
|
||||||
|
|||||||
Reference in New Issue
Block a user