feat: migrate to turbo (#22)

* feat: migrate top turbo

* ci: ci test

* fix: fix codeql issues

* feat: ci test

* chore: lint

* chore: misc changes

* feat: rename vite helpers

* feat: use fetch to handle assets

* feat: update directory

* feat: fetch charword table

* feat: migrate download game data and detect missing voice files

* feat: symlink relative path

* feat: finish wrangler upload

* feat: migrate wrangler download

* feat: finish

* chore: auto update

* ci: update ci

* ci: update ci

---------

Co-authored-by: Halyul <Halyul@users.noreply.github.com>
This commit is contained in:
Haoyu Xu
2025-02-22 15:11:30 +08:00
committed by GitHub
parent 17c61ce5d4
commit d6e7bc20d3
352 changed files with 12911 additions and 9411 deletions

View File

@@ -0,0 +1,30 @@
.border {
position: relative;
bottom: 1px;
border-bottom: 1px solid var(--text-color);
@media only screen and (width <= 430px) {
& {
margin: 0 1rem;
}
}
&::before,
&::after {
content: '';
display: block;
position: absolute;
width: 5px;
height: 5px;
top: -2px;
background-color: var(--text-color);
}
&::before {
right: 100%;
}
&::after {
left: 100%;
}
}

View File

@@ -0,0 +1,187 @@
.dropdown {
position: relative;
display: inline-block;
user-select: none;
z-index: 2;
padding: 0.5em;
cursor: pointer;
.text {
display: flex;
flex-direction: row;
align-items: center;
color: var(--text-color);
height: 2em;
min-width: 2em;
.popup {
opacity: 0;
position: absolute;
background-color: var(--root-background-color);
width: max-content;
height: max-content;
max-height: 61.8vh;
max-width: 61.8vw;
z-index: -1;
top: 2.5em;
right: 0;
cursor: auto;
transition: all cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
overflow: auto;
padding: 0.5rem;
border: 1px solid var(--border-color);
visibility: hidden;
.text {
font-size: 1rem;
}
}
&:hover {
.popup {
visibility: unset;
opacity: 1;
}
}
}
.content {
padding-right: 1.2em;
height: 1em;
}
.icon {
position: absolute;
bottom: 0.5em;
right: 0.6em;
width: 0.5em;
height: 0.5em;
display: inline-block;
vertical-align: middle;
border-left: 0.15em solid var(--text-color);
border-bottom: 0.15em solid var(--text-color);
border-right: 0.15em solid var(--text-color);
border-top: 0.15em solid var(--text-color);
transform: translateY(-0.7em) rotate(-45deg);
}
.menu {
scrollbar-gutter: stable;
opacity: 0;
position: absolute;
background-color: var(--root-background-color);
width: max-content;
max-height: 61.8vh;
max-width: 61.8vw;
z-index: -1;
top: 2.5em;
right: 0;
display: flex;
align-items: stretch;
flex-flow: column nowrap;
transition: all cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
overflow: auto;
padding: 0.5rem;
border: 1px solid var(--border-color);
visibility: hidden;
color: var(--link-highlight-color);
cursor: auto;
&.left {
left: 0;
right: unset;
}
.date {
font-family:
Bender, 'Noto Sans SC', 'Noto Sans JP', 'Noto Sans KR',
'Noto Sans', sans-serif;
font-weight: bold;
font-size: 1.5rem;
display: flex;
flex-flow: row nowrap;
align-items: center;
justify-content: space-between;
width: 100%;
.line {
height: 1px;
flex-grow: 1;
background-color: var(--text-color);
margin: 0.5rem;
}
}
.item {
cursor: pointer;
padding: 0.5rem;
font-size: 1rem;
display: flex;
justify-content: space-between;
align-items: center;
.text {
flex: 1;
transition: color cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
margin-left: 1rem;
}
.item-icon svg {
transition: fill cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
width: 1rem;
fill: var(--text-color);
}
&:hover,
&:focus,
&.active {
.text {
color: currentcolor;
}
.item-icon svg {
fill: currentcolor;
}
}
}
}
&.left {
/* stylelint-disable no-descending-specificity */
.popup,
.menu {
left: 0;
right: unset;
}
}
.overlay {
z-index: -1;
position: fixed;
inset: 0;
width: 100vw;
height: 100vh;
cursor: auto;
}
&.active,
&:hover {
.icon {
animation: icon-flash 2s cubic-bezier(0.65, 0.05, 0.36, 1) infinite;
}
}
&.active {
.menu {
visibility: visible;
opacity: 1;
z-index: 2;
}
}
}
@keyframes icon-flash {
50% {
opacity: 0.2;
}
}

View File

@@ -0,0 +1,96 @@
.entry-text {
cursor: pointer;
}
.popup {
position: fixed;
inset: 0;
overflow: hidden;
opacity: 0;
z-index: -1;
border: unset;
transition: all cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 1.2rem;
.wrapper {
display: flex;
flex-flow: column nowrap;
align-items: stretch;
max-width: 480px;
height: fit-content;
margin: 0 auto;
background-color: var(--root-background-color);
border: 1px solid var(--border-color);
padding: 2rem;
}
.title {
font-size: 3rem;
font-weight: 700;
display: flex;
flex-direction: row;
place-content: center space-between;
align-items: center;
text-transform: uppercase;
font-family:
Geometos, 'Noto Sans SC', 'Noto Sans JP', 'Noto Sans KR',
'Noto Sans', sans-serif;
.return-button {
color: var(--button-color);
transition: color cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
&:hover {
color: var(--text-color);
}
}
}
.text {
flex-grow: 1;
margin-right: 3rem;
}
.content {
line-height: 1.3em;
padding: 1rem 1rem 0;
user-select: text;
}
.overlay {
position: absolute;
inset: 0;
z-index: -1;
opacity: 0;
background-color: var(--root-background-color);
transition: all cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
&.active {
opacity: 0.5;
visibility: visible;
}
}
&.active {
opacity: 1;
z-index: 10;
}
@media (width <= 768px) {
.title {
font-size: 2rem;
}
.content {
font-size: 1rem;
}
.return-button {
transform: scale(0.8);
}
}
}

View File

@@ -0,0 +1,55 @@
.return-button {
display: flex;
flex-direction: column;
align-items: flex-start;
padding: 0.6rem 0;
width: 3rem;
cursor: pointer;
%arrow-shared {
border-top: 0.24rem solid transparent;
border-bottom: 0.24rem solid transparent;
}
.wrapper {
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
&:nth-child(1) {
transform: translateY(-0.1rem) rotate(45deg);
}
&:nth-child(2) {
transform: translateY(-0.1rem) translate(90%, -100%) rotate(-45deg);
}
&:nth-child(3) {
transform: translateY(-0.1rem) translateY(150%) rotate(315deg);
}
&:nth-child(4) {
transform: translateY(-0.1rem) translate(90%, 50%) rotate(225deg);
}
}
.bar {
width: 1rem;
height: 0.4rem;
background-color: currentcolor;
transition: transform cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
}
.arrow-left {
@extend %arrow-shared;
border-right: 0.3rem solid currentcolor;
}
.arrow-right {
@extend %arrow-shared;
border-left: 0.3rem solid currentcolor;
}
}

View File

@@ -0,0 +1,78 @@
.search-box {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: stretch;
margin: 0.5rem;
.icon {
position: absolute;
width: 0.8rem;
height: 0.8rem;
display: inline-block;
vertical-align: middle;
border-left: 0.15rem solid var(--text-color-full);
border-bottom: 0.15rem solid var(--text-color-full);
border-right: 0.15rem solid var(--text-color-full);
border-top: 0.15rem solid var(--text-color-full);
transform: translate(0.2rem, 0.3rem) rotate(-45deg);
}
.icon-dot {
position: absolute;
background-color: var(--text-color-full);
width: 0.15rem;
height: 0.6rem;
transform: translate(1.2rem, 1.1rem) rotate(-45deg);
}
.input {
flex-grow: 1;
font-size: 1.5rem;
width: 100%;
margin-left: 2rem;
padding-right: 2rem;
background-color: transparent;
border: unset;
border-bottom: 0.15em solid var(--home-item-outline-color);
color: var(--text-color);
transition: all cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
}
.input:focus,
.input:hover {
outline: none;
border-bottom: 0.15em solid var(--text-color);
}
.icon-clear {
position: absolute;
right: 1rem;
width: 2rem;
height: 2rem;
cursor: pointer;
opacity: 0;
transition: all cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
visibility: hidden;
&.active {
opacity: 1;
visibility: unset;
}
.line {
position: absolute;
width: 2rem;
height: 0.2rem;
background-color: var(--text-color);
&:nth-child(1) {
transform: translate(0, 0.8rem) rotate(45deg);
}
&:nth-child(2) {
transform: translate(0, 0.8rem) rotate(-45deg);
}
}
}
}

View File

@@ -0,0 +1,64 @@
.switch {
position: relative;
user-select: none;
z-index: 2;
padding: 8px 36px 8px 8px;
cursor: pointer;
display: flex;
flex-direction: row;
align-items: center;
color: var(--secondary-text-color);
transition: color cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
.content {
padding-right: 8px;
}
.wrapper {
color: var(--secondary-text-color);
transition: all cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
.icon {
position: absolute;
bottom: 0.65em;
right: 18px;
width: 0.5em;
height: 0.5em;
display: inline-block;
vertical-align: middle;
border-left: 0.15em solid currentcolor;
border-bottom: 0.15em solid currentcolor;
border-right: 0.15em solid currentcolor;
border-top: 0.15em solid currentcolor;
transform: translate(0, -0.15em) rotate(-45deg);
transition:
right cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s,
background-color cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
}
.line {
position: absolute;
bottom: 1.1em;
right: 6px;
width: 18px;
height: 0.15em;
display: inline-block;
vertical-align: middle;
background-color: currentcolor;
z-index: -1;
}
}
&.active {
color: var(--text-color);
.wrapper {
color: var(--text-color-full);
.icon {
background-color: currentcolor;
right: 0;
}
}
}
}

View File

@@ -0,0 +1,43 @@
.totop-button {
position: fixed;
user-select: none;
z-index: 2;
cursor: pointer;
right: 2rem;
bottom: 1rem;
display: flex;
flex-direction: column;
align-items: stretch;
justify-content: flex-start;
width: 3rem;
height: 3rem;
opacity: 0;
visibility: hidden;
transition: opacity cubic-bezier(0.65, 0.05, 0.36, 1) 0.3s;
&.show {
opacity: 1;
visibility: unset;
}
.bar {
position: absolute;
width: 100%;
height: 0.3rem;
background-color: var(--text-color-full);
will-change: auto;
}
.bar:nth-child(1) {
transform: rotateZ(45deg) scaleX(0.5) translateX(45%);
}
.bar:nth-child(2) {
transform: rotateZ(-45deg) scaleX(0.5) translateX(-45%);
}
.bar:nth-child(3),
.bar:nth-child(4) {
transform: translateY(450%) rotateZ(90deg) scaleX(0.5);
}
}