feat: initial commit
18
.eslintrc.cjs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
env: { browser: true, es2020: true },
|
||||||
|
extends: [
|
||||||
|
'eslint:recommended',
|
||||||
|
'plugin:@typescript-eslint/recommended',
|
||||||
|
'plugin:react-hooks/recommended',
|
||||||
|
],
|
||||||
|
ignorePatterns: ['dist', '.eslintrc.cjs'],
|
||||||
|
parser: '@typescript-eslint/parser',
|
||||||
|
plugins: ['react-refresh'],
|
||||||
|
rules: {
|
||||||
|
'react-refresh/only-export-components': [
|
||||||
|
'warn',
|
||||||
|
{ allowConstantExport: true },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
24
.gitignore
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
30
README.md
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# React + TypeScript + Vite
|
||||||
|
|
||||||
|
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
|
||||||
|
|
||||||
|
Currently, two official plugins are available:
|
||||||
|
|
||||||
|
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
|
||||||
|
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
|
||||||
|
|
||||||
|
## Expanding the ESLint configuration
|
||||||
|
|
||||||
|
If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:
|
||||||
|
|
||||||
|
- Configure the top-level `parserOptions` property like this:
|
||||||
|
|
||||||
|
```js
|
||||||
|
export default {
|
||||||
|
// other rules...
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 'latest',
|
||||||
|
sourceType: 'module',
|
||||||
|
project: ['./tsconfig.json', './tsconfig.node.json'],
|
||||||
|
tsconfigRootDir: __dirname,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
|
||||||
|
- Optionally add `plugin:@typescript-eslint/stylistic-type-checked`
|
||||||
|
- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list
|
16
index.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>˚ʚ Furina.id ɞ˚</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="root"></div>
|
||||||
|
<script type="module" src="/src/main.tsx"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
36
package.json
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"name": "furina-web",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"build": "tsc && vite build",
|
||||||
|
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
||||||
|
"preview": "vite preview"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"clsx": "^2.1.0",
|
||||||
|
"react": "^18.2.0",
|
||||||
|
"react-dom": "^18.2.0",
|
||||||
|
"react-router-dom": "^6.21.1",
|
||||||
|
"react-toastify": "^9.1.3",
|
||||||
|
"tailwind-merge": "^2.2.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^20.10.6",
|
||||||
|
"@types/react": "^18.2.43",
|
||||||
|
"@types/react-dom": "^18.2.17",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^6.14.0",
|
||||||
|
"@typescript-eslint/parser": "^6.14.0",
|
||||||
|
"@vitejs/plugin-react": "^4.2.1",
|
||||||
|
"autoprefixer": "^10.4.16",
|
||||||
|
"eslint": "^8.55.0",
|
||||||
|
"eslint-plugin-react-hooks": "^4.6.0",
|
||||||
|
"eslint-plugin-react-refresh": "^0.4.5",
|
||||||
|
"postcss": "^8.4.33",
|
||||||
|
"tailwindcss": "^3.4.0",
|
||||||
|
"typescript": "^5.2.2",
|
||||||
|
"vite": "^5.0.8"
|
||||||
|
}
|
||||||
|
}
|
6
postcss.config.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export default {
|
||||||
|
plugins: {
|
||||||
|
tailwindcss: {},
|
||||||
|
autoprefixer: {},
|
||||||
|
},
|
||||||
|
};
|
1
public/vite.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
After Width: | Height: | Size: 1.5 KiB |
14
src/App.tsx
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import { ToastContainer } from "react-toastify";
|
||||||
|
import Router from "./Router";
|
||||||
|
import "react-toastify/dist/ReactToastify.css";
|
||||||
|
|
||||||
|
const App = () => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Router />
|
||||||
|
<ToastContainer />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default App;
|
12
src/Loader.tsx
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import React, { Suspense } from "react";
|
||||||
|
import LoadingPage from "./pages/misc/loading-page";
|
||||||
|
|
||||||
|
const App = React.lazy(() => import("./App"));
|
||||||
|
|
||||||
|
const Loader = () => (
|
||||||
|
<Suspense fallback={<LoadingPage />}>
|
||||||
|
<App />
|
||||||
|
</Suspense>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default Loader;
|
26
src/Router.tsx
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import { lazy } from "react";
|
||||||
|
import { RouterProvider, createBrowserRouter } from "react-router-dom";
|
||||||
|
import MainLayout from "./components/layouts/MainLayout";
|
||||||
|
import ErrorBoundaryPage from "./pages/errors/error-boundary/page";
|
||||||
|
import NotFoundPage from "./pages/errors/not-found/page";
|
||||||
|
|
||||||
|
const HomePage = lazy(() => import("./pages/home/page"));
|
||||||
|
const FurinaBelovedPage = lazy(() => import("./pages/furina-beloved/page"));
|
||||||
|
|
||||||
|
const router = createBrowserRouter([
|
||||||
|
{
|
||||||
|
Component: MainLayout,
|
||||||
|
children: [
|
||||||
|
{ index: true, Component: HomePage },
|
||||||
|
{ path: "/furina-beloved", Component: FurinaBelovedPage },
|
||||||
|
{ path: "*", Component: NotFoundPage },
|
||||||
|
],
|
||||||
|
ErrorBoundary: ErrorBoundaryPage,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
const Router = () => {
|
||||||
|
return <RouterProvider router={router} />;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Router;
|
BIN
src/assets/audio/VO_JA_Furina_Elemental_Skill_1_04.ogg
Normal file
1
src/assets/icons/copy-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"><rect x="128" y="128" width="336" height="336" rx="57" ry="57" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32"/><path d="M383.5 128l.5-24a56.16 56.16 0 00-56-56H112a64.19 64.19 0 00-64 64v216a56.16 56.16 0 0056 56h24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/></svg>
|
After Width: | Height: | Size: 430 B |
1
src/assets/icons/play-outline.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"><path d="M112 111v290c0 17.44 17 28.52 31 20.16l247.9-148.37c12.12-7.25 12.12-26.33 0-33.58L143 90.84c-14-8.36-31 2.72-31 20.16z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/></svg>
|
After Width: | Height: | Size: 290 B |
BIN
src/assets/images/113932900_p0_master1200.webp
Normal file
After Width: | Height: | Size: 62 KiB |
49
src/assets/images/furina-ahoge.svg
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="78.461067mm"
|
||||||
|
height="99.857933mm"
|
||||||
|
viewBox="0 0 78.461067 99.857933"
|
||||||
|
version="1.1"
|
||||||
|
id="svg5"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:version="1.2.2 (b0a84865, 2022-12-01)"
|
||||||
|
sodipodi:docname="furina-ahoge.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="0.5946522"
|
||||||
|
inkscape:cx="394.34816"
|
||||||
|
inkscape:cy="326.24112"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1080"
|
||||||
|
inkscape:window-x="1440"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="layer1" /><defs
|
||||||
|
id="defs2" /><g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-24.520501,-12.209419)"><g
|
||||||
|
id="g5320"
|
||||||
|
transform="translate(-100.11104,-36.484912)"><path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#5b6583;stroke-width:8.8;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
|
||||||
|
d="m 197.99739,93.659439 c 4.4418,-17.901129 -13.8919,-42.069877 -33.59282,-40.489354 -23.43183,1.879839 -35.46139,18.690788 -35.37256,35.150097 0.14479,26.828548 12.24846,42.764298 63.18119,55.839708 -8.55629,-2.02869 -46.86753,-31.39828 -38.70961,-54.504893 4.95753,-14.041763 29.10872,-21.582069 44.4938,4.004442 z"
|
||||||
|
id="path456"
|
||||||
|
sodipodi:nodetypes="csscsc" /><path
|
||||||
|
id="path1066"
|
||||||
|
style="fill:#9cc1e5;fill-opacity:1;stroke:none;stroke-width:1.189;stroke-opacity:1"
|
||||||
|
d="m 165.21679,56.025521 c -2.05958,-0.02817 -4.11979,0.199132 -6.15156,0.703833 -18.14601,4.507547 -27.27536,25.607406 -23.58151,40.489518 4.36519,17.586938 25.89622,31.292728 41.14581,37.091278 -13.29913,-11.00875 -28.57405,-29.22322 -23.12572,-44.655157 4.95752,-14.041749 29.10834,-21.582079 44.49341,4.004406 0.5607,-2.259718 0.7577,-4.619495 0.63562,-7.014559 -4.66252,-17.756004 -19.03095,-30.422553 -33.41605,-30.619319 z" /></g></g></svg>
|
After Width: | Height: | Size: 2.5 KiB |
BIN
src/assets/images/furina-build.webp
Normal file
After Width: | Height: | Size: 242 KiB |
BIN
src/assets/images/furina-cover.webp
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
src/assets/images/header-img.gif
Normal file
After Width: | Height: | Size: 213 KiB |
BIN
src/assets/images/l9fsdoa2j7vb1.gif
Normal file
After Width: | Height: | Size: 35 KiB |
325
src/assets/images/title-img.svg
Normal file
@ -0,0 +1,325 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="81.073494mm"
|
||||||
|
height="16.619713mm"
|
||||||
|
viewBox="0 0 81.073494 16.619713"
|
||||||
|
version="1.1"
|
||||||
|
id="svg5"
|
||||||
|
sodipodi:docname="title-img.svg"
|
||||||
|
inkscape:version="1.2.2 (b0a84865, 2022-12-01)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="1.1893044"
|
||||||
|
inkscape:cx="70.209107"
|
||||||
|
inkscape:cy="136.63449"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1027"
|
||||||
|
inkscape:window-x="1440"
|
||||||
|
inkscape:window-y="25"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1" />
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient4461">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#dbedff;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4457" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4459" />
|
||||||
|
</linearGradient>
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="perspective-envelope"
|
||||||
|
up_left_point="12.49,13.981926"
|
||||||
|
up_right_point="91.72,13.981926"
|
||||||
|
down_left_point="10.385328,29.489294"
|
||||||
|
down_right_point="89.220182,29.489294"
|
||||||
|
id="path-effect2044"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
deform_type="envelope_deformation"
|
||||||
|
horizontal_mirror="false"
|
||||||
|
vertical_mirror="false"
|
||||||
|
overflow_perspective="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="perspective-envelope"
|
||||||
|
up_left_point="12.49,13.981926"
|
||||||
|
up_right_point="91.72,13.981926"
|
||||||
|
down_left_point="10.385328,29.489294"
|
||||||
|
down_right_point="89.220182,29.489294"
|
||||||
|
id="path-effect1949"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
deform_type="envelope_deformation"
|
||||||
|
horizontal_mirror="false"
|
||||||
|
vertical_mirror="false"
|
||||||
|
overflow_perspective="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="lattice2"
|
||||||
|
gridpoint0="10.385328,13.981926"
|
||||||
|
gridpoint1="89.220182,13.981926"
|
||||||
|
gridpoint2="10.385328,29.489294"
|
||||||
|
gridpoint3="89.220182,29.489294"
|
||||||
|
gridpoint4="30.094042,13.981926"
|
||||||
|
gridpoint5="69.511469,13.981926"
|
||||||
|
gridpoint6="30.094042,29.489294"
|
||||||
|
gridpoint7="69.511469,29.489294"
|
||||||
|
gridpoint8x9="49.802755,13.981926"
|
||||||
|
gridpoint10x11="49.802755,29.489294"
|
||||||
|
gridpoint12="10.385328,17.858768"
|
||||||
|
gridpoint13="89.220182,17.858768"
|
||||||
|
gridpoint14="10.385328,25.612452"
|
||||||
|
gridpoint15="89.220182,25.612452"
|
||||||
|
gridpoint16="30.094042,17.858768"
|
||||||
|
gridpoint17="69.511469,17.858768"
|
||||||
|
gridpoint18="30.094042,25.612452"
|
||||||
|
gridpoint19="69.511469,25.612452"
|
||||||
|
gridpoint20x21="49.802755,17.858768"
|
||||||
|
gridpoint22x23="49.802755,25.612452"
|
||||||
|
gridpoint24x26="10.385328,21.73561"
|
||||||
|
gridpoint25x27="89.220182,21.73561"
|
||||||
|
gridpoint28x30="30.094042,21.73561"
|
||||||
|
gridpoint29x31="69.511469,21.73561"
|
||||||
|
gridpoint32x33x34x35="49.802755,21.73561"
|
||||||
|
id="path-effect1947"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
horizontal_mirror="false"
|
||||||
|
vertical_mirror="false"
|
||||||
|
perimetral="false"
|
||||||
|
live_update="true" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="envelope"
|
||||||
|
id="path-effect1945"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
yy="true"
|
||||||
|
xx="true"
|
||||||
|
bendpath1="M 10.385328,13.981926 H 89.220182"
|
||||||
|
bendpath2="M 89.220182,13.981926 V 29.489294"
|
||||||
|
bendpath3="M 10.385328,29.489294 H 89.220182"
|
||||||
|
bendpath4="M 10.385328,13.981926 V 29.489294" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4461"
|
||||||
|
id="linearGradient4463"
|
||||||
|
x1="51.604469"
|
||||||
|
y1="3.4931529"
|
||||||
|
x2="63.823807"
|
||||||
|
y2="31.413006"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4461"
|
||||||
|
id="linearGradient7537"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="51.604469"
|
||||||
|
y1="3.4931529"
|
||||||
|
x2="63.823807"
|
||||||
|
y2="31.413006" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4461"
|
||||||
|
id="linearGradient7539"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="51.604469"
|
||||||
|
y1="3.4931529"
|
||||||
|
x2="63.823807"
|
||||||
|
y2="31.413006" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4461"
|
||||||
|
id="linearGradient7541"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="51.604469"
|
||||||
|
y1="3.4931529"
|
||||||
|
x2="63.823807"
|
||||||
|
y2="31.413006" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4461"
|
||||||
|
id="linearGradient7543"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="51.604469"
|
||||||
|
y1="3.4931529"
|
||||||
|
x2="63.823807"
|
||||||
|
y2="31.413006" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4461"
|
||||||
|
id="linearGradient7545"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="51.604469"
|
||||||
|
y1="3.4931529"
|
||||||
|
x2="63.823807"
|
||||||
|
y2="31.413006" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4461"
|
||||||
|
id="linearGradient7547"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="51.604469"
|
||||||
|
y1="3.4931529"
|
||||||
|
x2="63.823807"
|
||||||
|
y2="31.413006" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4461"
|
||||||
|
id="linearGradient7549"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="51.604469"
|
||||||
|
y1="3.4931529"
|
||||||
|
x2="63.823807"
|
||||||
|
y2="31.413006" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4461"
|
||||||
|
id="linearGradient7551"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="51.604469"
|
||||||
|
y1="3.4931529"
|
||||||
|
x2="63.823807"
|
||||||
|
y2="31.413006" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4461"
|
||||||
|
id="linearGradient7553"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="51.604469"
|
||||||
|
y1="3.4931529"
|
||||||
|
x2="63.823807"
|
||||||
|
y2="31.413006" />
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-11.22635,-13.981926)">
|
||||||
|
<g
|
||||||
|
id="g5211">
|
||||||
|
<g
|
||||||
|
aria-label="Furina.id"
|
||||||
|
id="g2040"
|
||||||
|
style="font-style:italic;font-size:23.6033px;font-family:Arial;-inkscape-font-specification:'Arial Italic';fill:#90c8ff;fill-opacity:0.861176;stroke:none;stroke-width:6.34755"
|
||||||
|
inkscape:path-effect="#path-effect2044"
|
||||||
|
transform="translate(0.66740693,1.1123449)">
|
||||||
|
<path
|
||||||
|
d="m 12.802259,17.616834 c 0.04493,-0.330446 0.01276,-0.558611 -0.09652,-0.684495 -0.09349,-0.125885 -0.290342,-0.188827 -0.590549,-0.188827 l 0.115325,-0.849719 h 9.482809 l -0.245662,1.770248 h -5.804912 l -0.478243,3.493288 h 4.851708 l -0.241853,1.746645 h -4.848976 l -0.862776,6.302081 h -2.85626 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:#90c8ff;fill-opacity:0.861176;stroke:none"
|
||||||
|
id="path2022"
|
||||||
|
inkscape:original-d="m 11.18784,17.616834 q 0,-0.495669 -0.188826,-0.684495 -0.165223,-0.188827 -0.613686,-0.188827 v -0.849719 h 9.44132 v 1.770248 h -5.782809 v 3.493288 h 4.838677 v 1.746645 h -4.838677 v 6.302081 H 11.18784 Z" />
|
||||||
|
<path
|
||||||
|
d="m 23.249105,20.52004 c 0.0395,-0.283239 -0.01658,-0.503537 -0.168267,-0.660892 -0.13592,-0.157355 -0.345957,-0.236033 -0.630099,-0.236033 l 0.08541,-0.613686 h 3.220922 c 0.347354,0 0.492314,0.204562 0.43488,0.613686 l -0.798549,5.688395 c -0.207645,1.47914 0.153025,2.21871 1.08201,2.21871 0.850257,0 1.53891,-0.472066 2.066141,-1.416198 l 0.791185,-5.593982 c 0.04006,-0.283239 -0.01559,-0.503537 -0.166972,-0.660892 -0.135611,-0.157355 -0.345493,-0.236033 -0.629636,-0.236033 l 0.08661,-0.613686 h 3.220923 c 0.157888,0 0.282019,0.07081 0.372385,0.21243 0.0926,0.125884 0.12657,0.275371 0.101929,0.448462 l -1.159241,8.143139 c -0.03136,0.220297 -0.0065,0.377653 0.07447,0.472066 0.09899,0.07868 0.298015,0.118016 0.597096,0.118016 l -0.08751,0.613686 -2.265935,0.330446 c -0.440615,0 -0.765778,-0.259636 -0.975559,-0.778908 -0.781686,0.519272 -1.605186,0.778908 -2.47068,0.778908 -1.227428,0 -2.157896,-0.322578 -2.79163,-0.967735 -0.631839,-0.660892 -0.851307,-1.683702 -0.658174,-3.068429 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:#90c8ff;fill-opacity:0.861176;stroke:none"
|
||||||
|
id="path2024"
|
||||||
|
inkscape:original-d="m 21.998125,20.52004 q 0,-0.424859 -0.259637,-0.660892 -0.236033,-0.236033 -0.660892,-0.236033 v -0.613686 h 3.210049 q 0.519272,0 0.519272,0.613686 v 5.688395 q 0,2.21871 1.392595,2.21871 1.274578,0 1.864661,-1.416198 V 20.52004 q 0,-0.424859 -0.259637,-0.660892 -0.236033,-0.236033 -0.660892,-0.236033 v -0.613686 h 3.210049 q 0.236033,0 0.401256,0.21243 0.165223,0.188826 0.165223,0.448462 v 8.143139 q 0,0.330446 0.14162,0.472066 0.165223,0.118016 0.613686,0.118016 v 0.613686 l -2.218711,0.330446 q -0.660892,0 -1.085751,-0.778908 -1.062149,0.778908 -2.36033,0.778908 -1.841058,0 -2.92681,-0.967735 -1.085751,-0.991338 -1.085751,-3.068429 z" />
|
||||||
|
<path
|
||||||
|
d="m 34.408293,19.292669 3.105951,-0.519273 c 0.17369,0 0.305597,0.07081 0.395713,0.21243 0.09238,0.125884 0.126081,0.275371 0.101124,0.448462 l -0.102094,0.708099 1.926392,-1.368991 2.417119,0.967735 -1.752566,2.124297 h -0.520553 c 0.03877,-0.267504 -0.09154,-0.511405 -0.390963,-0.731702 -0.281414,-0.236033 -0.611497,-0.354049 -0.990213,-0.354049 l -0.835552,0.377652 -1.160477,8.048726 h -2.856261 l 1.230819,-8.591602 c 0.0248,-0.173091 -0.02368,-0.330446 -0.145445,-0.472066 -0.119523,-0.157355 -0.28978,-0.236033 -0.51076,-0.236033 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:#90c8ff;fill-opacity:0.861176;stroke:none"
|
||||||
|
id="path2026"
|
||||||
|
inkscape:original-d="m 32.950031,19.292669 3.021223,-0.519273 q 0.259636,0 0.424859,0.21243 0.165223,0.188826 0.165223,0.448462 v 0.708099 l 1.723041,-1.368991 2.549156,0.967735 -1.439801,2.124297 h -0.519273 q 0,-0.401256 -0.495669,-0.731702 -0.472066,-0.354049 -1.038545,-0.354049 l -0.778909,0.377652 v 8.048726 h -2.855999 v -8.591602 q 0,-0.259636 -0.21243,-0.472066 -0.21243,-0.236033 -0.542876,-0.236033 z" />
|
||||||
|
<path
|
||||||
|
d="m 43.964363,17.097562 c 0.06202,-0.424859 0.260389,-0.755306 0.595127,-0.991339 0.35289,-0.251769 0.790145,-0.377653 1.311727,-0.377653 0.521583,0 0.914042,0.125884 1.177341,0.377653 0.281366,0.236033 0.390785,0.56648 0.328294,0.991339 -0.05786,0.393388 -0.26326,0.715966 -0.616152,0.967735 -0.35053,0.236033 -0.778447,0.35405 -1.283786,0.35405 -0.505338,0 -0.898667,-0.118017 -1.180021,-0.35405 -0.279104,-0.251769 -0.38996,-0.574347 -0.33253,-0.967735 z m 1.442629,12.108493 h -2.856261 l 1.220782,-8.355569 c 0.03908,-0.267504 0.01029,-0.448462 -0.0864,-0.542875 -0.09439,-0.110149 -0.283639,-0.165224 -0.567735,-0.165224 l 0.08951,-0.613685 3.11413,-0.56648 c 0.394727,0 0.550446,0.28324 0.467158,0.849719 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:#90c8ff;fill-opacity:0.861176;stroke:none"
|
||||||
|
id="path2028"
|
||||||
|
inkscape:original-d="m 42.1553,17.097562 q 0,-0.637289 0.448462,-0.991339 0.472066,-0.377653 1.250975,-0.377653 0.778909,0 1.227372,0.377653 0.472066,0.35405 0.472066,0.991339 0,0.590082 -0.472066,0.967735 -0.472066,0.35405 -1.227372,0.35405 -0.755305,0 -1.227371,-0.35405 Q 42.1553,17.687644 42.1553,17.097562 Z m 3.210048,12.108493 h -2.855999 v -8.355569 q 0,-0.401256 -0.165223,-0.542875 -0.165223,-0.165224 -0.590083,-0.165224 v -0.613685 l 3.021223,-0.56648 q 0.590082,0 0.590082,0.849719 z" />
|
||||||
|
<path
|
||||||
|
d="m 49.226654,20.614453 c 0.04188,-0.283239 0.01455,-0.472066 -0.08197,-0.566479 -0.08075,-0.09441 -0.271078,-0.14162 -0.57098,-0.14162 l 0.09058,-0.613685 3.108336,-0.519273 c 0.39475,0 0.552328,0.267504 0.472733,0.802512 l -0.07726,0.519273 c 1.27422,-0.818248 2.456298,-1.227372 3.545777,-1.227372 0.963163,0 1.614123,0.291107 1.952761,0.873322 0.35426,0.582215 0.431704,1.534215 0.232455,2.856 l -0.818345,5.428759 c -0.05693,0.377653 0.127099,0.566479 0.552081,0.566479 l -0.09264,0.613686 h -2.974288 c -0.141633,0 -0.259273,-0.05507 -0.352926,-0.165223 -0.07557,-0.125885 -0.102742,-0.259637 -0.08152,-0.401257 l 0.873449,-5.830015 c 0.120232,-0.802512 0.121505,-1.33752 0.0038,-1.605024 -0.115378,-0.283239 -0.330876,-0.424859 -0.646473,-0.424859 -0.362935,0 -0.782937,0.118016 -1.259954,0.354049 -0.458828,0.220297 -0.865035,0.511405 -1.218612,0.873322 l -1.071026,7.199007 h -2.856261 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:#90c8ff;fill-opacity:0.861176;stroke:none"
|
||||||
|
id="path2030"
|
||||||
|
inkscape:original-d="m 47.9145,20.614453 q 0,-0.424859 -0.165223,-0.566479 -0.14162,-0.14162 -0.590083,-0.14162 v -0.613685 l 3.021223,-0.519273 q 0.590082,0 0.590082,0.802512 v 0.519273 q 1.723041,-1.227372 3.351669,-1.227372 1.439801,0 2.07709,0.873322 0.660893,0.873322 0.660893,2.856 v 5.428759 q 0,0.566479 0.637289,0.566479 v 0.613686 h -2.974016 q -0.21243,0 -0.377653,-0.165223 -0.14162,-0.188827 -0.14162,-0.401257 V 22.80956 q 0,-1.203768 -0.236033,-1.605024 -0.236033,-0.424859 -0.708099,-0.424859 -0.542875,0 -1.203768,0.354049 -0.637289,0.330446 -1.085752,0.873322 v 7.199007 H 47.9145 Z" />
|
||||||
|
<path
|
||||||
|
d="m 68.46948,29.206055 h -2.336941 c -0.723901,0 -1.231902,-0.330446 -1.52413,-0.991339 -0.540631,0.755305 -1.432451,1.132958 -2.675616,1.132958 -0.928439,0 -1.703023,-0.236033 -2.323911,-0.708099 -0.602975,-0.487801 -0.823616,-1.26671 -0.661764,-2.336726 0.337985,-2.234446 2.383706,-3.509024 6.137727,-3.823735 0.07201,-0.676628 0.02713,-1.156562 -0.13465,-1.439801 -0.159415,-0.298975 -0.49163,-0.448463 -0.996615,-0.448463 -1.041532,0 -1.878432,0.574347 -2.510444,1.723041 h -0.567793 l -0.572928,-1.841057 c 1.404397,-1.038545 2.975321,-1.557818 4.712146,-1.557818 1.215777,0 2.09113,0.314711 2.625866,0.944132 0.552683,0.613686 0.719839,1.628628 0.501658,3.044826 l -0.72727,4.72066 c 0.0096,0.346181 0.09678,0.59795 0.261425,0.755305 0.16705,0.14162 0.46306,0.21243 0.888043,0.21243 z m -3.579715,-5.452363 c -0.977129,0.204562 -1.71325,0.535008 -2.208364,0.991339 -0.476836,0.440595 -0.757119,0.936264 -0.840938,1.487008 -0.1389,0.912661 0.232515,1.368991 1.114242,1.368991 0.440864,0 0.769542,-0.14162 0.986058,-0.424859 0.232298,-0.28324 0.447478,-0.763174 0.645545,-1.439801 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:#90c8ff;fill-opacity:0.861176;stroke:none"
|
||||||
|
id="path2032"
|
||||||
|
inkscape:original-d="m 68.425725,29.206055 h -2.336727 q -1.085752,0 -1.675834,-0.991339 -0.637289,1.132958 -2.50195,1.132958 -1.392595,0 -2.43114,-0.708099 -1.014942,-0.731702 -1.014942,-2.336726 0,-3.351669 5.546776,-3.823735 -0.04721,-1.014942 -0.35405,-1.439801 -0.306843,-0.448463 -1.062148,-0.448463 -1.557818,0 -2.242314,1.723041 h -0.566479 l -0.849719,-1.841057 q 1.864661,-1.557818 4.461024,-1.557818 1.817454,0 2.761586,0.944132 0.967735,0.920529 0.967735,3.044826 v 4.72066 q 0.09441,0.519272 0.377653,0.755305 0.28324,0.21243 0.920529,0.21243 z m -4.413817,-5.452363 q -1.416198,0.306843 -2.053487,0.991339 -0.613686,0.660892 -0.613686,1.487008 0,1.368991 1.321785,1.368991 0.660892,0 0.920528,-0.424859 0.28324,-0.42486 0.42486,-1.439801 z" />
|
||||||
|
<path
|
||||||
|
d="m 70.85683,29.489294 c -0.456331,0 -0.809043,-0.110149 -1.058166,-0.330446 -0.249165,-0.220297 -0.344538,-0.519272 -0.286088,-0.896925 0.05601,-0.361917 0.241557,-0.645157 0.556657,-0.849719 0.317575,-0.220297 0.704721,-0.330446 1.161407,-0.330446 0.472433,0 0.833247,0.110149 1.082411,0.330446 0.251575,0.204562 0.34916,0.487802 0.292785,0.849719 -0.05883,0.377653 -0.247044,0.676628 -0.56462,0.896925 -0.317535,0.220297 -0.71232,0.330446 -1.184386,0.330446 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:#90c8ff;fill-opacity:0.861176;stroke:none"
|
||||||
|
id="path2034"
|
||||||
|
inkscape:original-d="m 70.85683,29.489294 q -0.684496,0 -1.109355,-0.330446 -0.42486,-0.330446 -0.42486,-0.896925 0,-0.542876 0.42486,-0.849719 0.424859,-0.330446 1.109355,-0.330446 0.708099,0 1.132958,0.330446 0.42486,0.306843 0.42486,0.849719 0,0.566479 -0.42486,0.896925 -0.424859,0.330446 -1.132958,0.330446 z" />
|
||||||
|
<path
|
||||||
|
d="m 76.714684,17.097562 c 0.0665,-0.424859 0.268353,-0.755306 0.60558,-0.991339 0.355545,-0.251769 0.794127,-0.377653 1.315709,-0.377653 0.521583,0 0.912714,0.125884 1.173359,0.377653 0.278878,0.236033 0.384813,0.56648 0.317842,0.991339 -0.06201,0.393388 -0.270808,0.715966 -0.626355,0.967735 -0.353019,0.236033 -0.78218,0.35405 -1.287519,0.35405 -0.505339,0 -0.897423,-0.118017 -1.176289,-0.35405 -0.27645,-0.251769 -0.383905,-0.574347 -0.322327,-0.967735 z m 1.314965,12.108493 h -2.85626 l 1.308878,-8.355569 c 0.0419,-0.267504 0.01501,-0.448462 -0.08067,-0.542875 -0.09323,-0.110149 -0.281897,-0.165224 -0.565992,-0.165224 l 0.09598,-0.613685 3.120102,-0.56648 c 0.394727,0 0.54746,0.28324 0.458199,0.849719 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:#90c8ff;fill-opacity:0.861176;stroke:none"
|
||||||
|
id="path2036"
|
||||||
|
inkscape:original-d="m 74.77497,17.097562 q 0,-0.637289 0.448463,-0.991339 0.472066,-0.377653 1.250975,-0.377653 0.778909,0 1.227372,0.377653 0.472066,0.35405 0.472066,0.991339 0,0.590082 -0.472066,0.967735 -0.472066,0.35405 -1.227372,0.35405 -0.755306,0 -1.227372,-0.35405 -0.472066,-0.377653 -0.472066,-0.967735 z m 3.210049,12.108493 H 75.12902 v -8.355569 q 0,-0.401256 -0.165223,-0.542875 -0.165223,-0.165224 -0.590083,-0.165224 v -0.613685 l 3.021223,-0.56648 q 0.590082,0 0.590082,0.849719 z" />
|
||||||
|
<path
|
||||||
|
d="m 81.320323,27.95508 c -0.716436,-0.944132 -0.947935,-2.21871 -0.6941,-3.823735 0.253835,-1.605024 0.880155,-2.871734 1.879343,-3.800131 1.017984,-0.944132 2.18243,-1.416198 3.492943,-1.416198 0.805255,0 1.459341,0.204562 1.962145,0.613686 l 0.586382,-3.658512 c 0.04792,-0.298975 0.03076,-0.487802 -0.05148,-0.566479 -0.07972,-0.09441 -0.277666,-0.14162 -0.593834,-0.14162 l 0.09821,-0.613686 3.127021,-0.566479 c 0.395361,0 0.558797,0.21243 0.490309,0.637289 l -2.351427,14.58684 h -2.856262 l 0.12106,-0.755306 c -0.505021,0.59795 -1.245296,0.896925 -2.220943,0.896925 -1.274637,0 -2.270964,-0.464198 -2.989373,-1.392594 z m 2.33611,-3.847338 c -0.155244,0.975603 -0.105533,1.801718 0.149014,2.478346 0.25439,0.676628 0.727918,1.014942 1.420704,1.014942 0.425119,0 0.934318,-0.180959 1.527691,-0.542876 L 87.06784,25.09908 c 0.257252,-1.605024 0.299416,-2.753718 0.126399,-3.446081 -0.157365,-0.692364 -0.512255,-1.038546 -1.064578,-1.038546 -0.615446,0 -1.144046,0.346182 -1.585688,1.038546 -0.438989,0.676628 -0.734799,1.494876 -0.88754,2.454743 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:#90c8ff;fill-opacity:0.861176;stroke:none"
|
||||||
|
id="path2038"
|
||||||
|
inkscape:original-d="m 81.077043,27.95508 q -1.298181,-1.416198 -1.298181,-3.823735 0,-2.407536 1.274578,-3.800131 1.298181,-1.416198 3.257255,-1.416198 1.203768,0 2.053487,0.613686 V 15.87019 q 0,-0.448463 -0.14162,-0.566479 -0.141619,-0.14162 -0.613685,-0.14162 v -0.613686 l 3.021222,-0.566479 q 0.590083,0 0.590083,0.637289 v 14.58684 h -2.856 v -0.755306 q -0.613686,0.896925 -2.07709,0.896925 -1.911867,0 -3.210049,-1.392594 z m 1.723041,-3.847338 q 0,1.463404 0.542876,2.478346 0.542876,1.014942 1.581421,1.014942 0.637289,0 1.439801,-0.542876 V 25.09908 q 0,-2.407536 -0.424859,-3.446081 -0.401256,-1.038546 -1.227372,-1.038546 -0.920528,0 -1.416198,1.038546 -0.495669,1.014942 -0.495669,2.454743 z" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
aria-label="Furina.id"
|
||||||
|
id="text236"
|
||||||
|
style="font-style:italic;font-size:23.6033px;font-family:Arial;-inkscape-font-specification:'Arial Italic';fill:url(#linearGradient4463);fill-opacity:1;stroke:none;stroke-width:6.34755"
|
||||||
|
inkscape:path-effect="#path-effect1949">
|
||||||
|
<path
|
||||||
|
d="m 12.802259,17.616834 c 0.04493,-0.330446 0.01276,-0.558611 -0.09652,-0.684495 -0.09349,-0.125885 -0.290342,-0.188827 -0.590549,-0.188827 l 0.115325,-0.849719 h 9.482809 l -0.245662,1.770248 h -5.804912 l -0.478243,3.493288 h 4.851708 l -0.241853,1.746645 h -4.848976 l -0.862776,6.302081 h -2.85626 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:url(#linearGradient7537);fill-opacity:1;stroke:none"
|
||||||
|
id="path1877"
|
||||||
|
inkscape:original-d="m 11.18784,17.616834 q 0,-0.495669 -0.188826,-0.684495 -0.165223,-0.188827 -0.613686,-0.188827 v -0.849719 h 9.44132 v 1.770248 h -5.782809 v 3.493288 h 4.838677 v 1.746645 h -4.838677 v 6.302081 H 11.18784 Z" />
|
||||||
|
<path
|
||||||
|
d="m 23.249105,20.52004 c 0.0395,-0.283239 -0.01658,-0.503537 -0.168267,-0.660892 -0.13592,-0.157355 -0.345957,-0.236033 -0.630099,-0.236033 l 0.08541,-0.613686 h 3.220922 c 0.347354,0 0.492314,0.204562 0.43488,0.613686 l -0.798549,5.688395 c -0.207645,1.47914 0.153025,2.21871 1.08201,2.21871 0.850257,0 1.53891,-0.472066 2.066141,-1.416198 l 0.791185,-5.593982 c 0.04006,-0.283239 -0.01559,-0.503537 -0.166972,-0.660892 -0.135611,-0.157355 -0.345493,-0.236033 -0.629636,-0.236033 l 0.08661,-0.613686 h 3.220923 c 0.157888,0 0.282019,0.07081 0.372385,0.21243 0.0926,0.125884 0.12657,0.275371 0.101929,0.448462 l -1.159241,8.143139 c -0.03136,0.220297 -0.0065,0.377653 0.07447,0.472066 0.09899,0.07868 0.298015,0.118016 0.597096,0.118016 l -0.08751,0.613686 -2.265935,0.330446 c -0.440615,0 -0.765778,-0.259636 -0.975559,-0.778908 -0.781686,0.519272 -1.605186,0.778908 -2.47068,0.778908 -1.227428,0 -2.157896,-0.322578 -2.79163,-0.967735 -0.631839,-0.660892 -0.851307,-1.683702 -0.658174,-3.068429 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:url(#linearGradient7539);fill-opacity:1;stroke:none"
|
||||||
|
id="path1879"
|
||||||
|
inkscape:original-d="m 21.998125,20.52004 q 0,-0.424859 -0.259637,-0.660892 -0.236033,-0.236033 -0.660892,-0.236033 v -0.613686 h 3.210049 q 0.519272,0 0.519272,0.613686 v 5.688395 q 0,2.21871 1.392595,2.21871 1.274578,0 1.864661,-1.416198 V 20.52004 q 0,-0.424859 -0.259637,-0.660892 -0.236033,-0.236033 -0.660892,-0.236033 v -0.613686 h 3.210049 q 0.236033,0 0.401256,0.21243 0.165223,0.188826 0.165223,0.448462 v 8.143139 q 0,0.330446 0.14162,0.472066 0.165223,0.118016 0.613686,0.118016 v 0.613686 l -2.218711,0.330446 q -0.660892,0 -1.085751,-0.778908 -1.062149,0.778908 -2.36033,0.778908 -1.841058,0 -2.92681,-0.967735 -1.085751,-0.991338 -1.085751,-3.068429 z" />
|
||||||
|
<path
|
||||||
|
d="m 34.408293,19.292669 3.105951,-0.519273 c 0.17369,0 0.305597,0.07081 0.395713,0.21243 0.09238,0.125884 0.126081,0.275371 0.101124,0.448462 l -0.102094,0.708099 1.926392,-1.368991 2.417119,0.967735 -1.752566,2.124297 h -0.520553 c 0.03877,-0.267504 -0.09154,-0.511405 -0.390963,-0.731702 -0.281414,-0.236033 -0.611497,-0.354049 -0.990213,-0.354049 l -0.835552,0.377652 -1.160477,8.048726 h -2.856261 l 1.230819,-8.591602 c 0.0248,-0.173091 -0.02368,-0.330446 -0.145445,-0.472066 -0.119523,-0.157355 -0.28978,-0.236033 -0.51076,-0.236033 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:url(#linearGradient7541);fill-opacity:1;stroke:none"
|
||||||
|
id="path1881"
|
||||||
|
inkscape:original-d="m 32.950031,19.292669 3.021223,-0.519273 q 0.259636,0 0.424859,0.21243 0.165223,0.188826 0.165223,0.448462 v 0.708099 l 1.723041,-1.368991 2.549156,0.967735 -1.439801,2.124297 h -0.519273 q 0,-0.401256 -0.495669,-0.731702 -0.472066,-0.354049 -1.038545,-0.354049 l -0.778909,0.377652 v 8.048726 h -2.855999 v -8.591602 q 0,-0.259636 -0.21243,-0.472066 -0.21243,-0.236033 -0.542876,-0.236033 z" />
|
||||||
|
<path
|
||||||
|
d="m 43.964363,17.097562 c 0.06202,-0.424859 0.260389,-0.755306 0.595127,-0.991339 0.35289,-0.251769 0.790145,-0.377653 1.311727,-0.377653 0.521583,0 0.914042,0.125884 1.177341,0.377653 0.281366,0.236033 0.390785,0.56648 0.328294,0.991339 -0.05786,0.393388 -0.26326,0.715966 -0.616152,0.967735 -0.35053,0.236033 -0.778447,0.35405 -1.283786,0.35405 -0.505338,0 -0.898667,-0.118017 -1.180021,-0.35405 -0.279104,-0.251769 -0.38996,-0.574347 -0.33253,-0.967735 z m 1.442629,12.108493 h -2.856261 l 1.220782,-8.355569 c 0.03908,-0.267504 0.01029,-0.448462 -0.0864,-0.542875 -0.09439,-0.110149 -0.283639,-0.165224 -0.567735,-0.165224 l 0.08951,-0.613685 3.11413,-0.56648 c 0.394727,0 0.550446,0.28324 0.467158,0.849719 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:url(#linearGradient7543);fill-opacity:1;stroke:none"
|
||||||
|
id="path1883"
|
||||||
|
inkscape:original-d="m 42.1553,17.097562 q 0,-0.637289 0.448462,-0.991339 0.472066,-0.377653 1.250975,-0.377653 0.778909,0 1.227372,0.377653 0.472066,0.35405 0.472066,0.991339 0,0.590082 -0.472066,0.967735 -0.472066,0.35405 -1.227372,0.35405 -0.755305,0 -1.227371,-0.35405 Q 42.1553,17.687644 42.1553,17.097562 Z m 3.210048,12.108493 h -2.855999 v -8.355569 q 0,-0.401256 -0.165223,-0.542875 -0.165223,-0.165224 -0.590083,-0.165224 v -0.613685 l 3.021223,-0.56648 q 0.590082,0 0.590082,0.849719 z" />
|
||||||
|
<path
|
||||||
|
d="m 49.226654,20.614453 c 0.04188,-0.283239 0.01455,-0.472066 -0.08197,-0.566479 -0.08075,-0.09441 -0.271078,-0.14162 -0.57098,-0.14162 l 0.09058,-0.613685 3.108336,-0.519273 c 0.39475,0 0.552328,0.267504 0.472733,0.802512 l -0.07726,0.519273 c 1.27422,-0.818248 2.456298,-1.227372 3.545777,-1.227372 0.963163,0 1.614123,0.291107 1.952761,0.873322 0.35426,0.582215 0.431704,1.534215 0.232455,2.856 l -0.818345,5.428759 c -0.05693,0.377653 0.127099,0.566479 0.552081,0.566479 l -0.09264,0.613686 h -2.974288 c -0.141633,0 -0.259273,-0.05507 -0.352926,-0.165223 -0.07557,-0.125885 -0.102742,-0.259637 -0.08152,-0.401257 l 0.873449,-5.830015 c 0.120232,-0.802512 0.121505,-1.33752 0.0038,-1.605024 -0.115378,-0.283239 -0.330876,-0.424859 -0.646473,-0.424859 -0.362935,0 -0.782937,0.118016 -1.259954,0.354049 -0.458828,0.220297 -0.865035,0.511405 -1.218612,0.873322 l -1.071026,7.199007 h -2.856261 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:url(#linearGradient7545);fill-opacity:1;stroke:none"
|
||||||
|
id="path1885"
|
||||||
|
inkscape:original-d="m 47.9145,20.614453 q 0,-0.424859 -0.165223,-0.566479 -0.14162,-0.14162 -0.590083,-0.14162 v -0.613685 l 3.021223,-0.519273 q 0.590082,0 0.590082,0.802512 v 0.519273 q 1.723041,-1.227372 3.351669,-1.227372 1.439801,0 2.07709,0.873322 0.660893,0.873322 0.660893,2.856 v 5.428759 q 0,0.566479 0.637289,0.566479 v 0.613686 h -2.974016 q -0.21243,0 -0.377653,-0.165223 -0.14162,-0.188827 -0.14162,-0.401257 V 22.80956 q 0,-1.203768 -0.236033,-1.605024 -0.236033,-0.424859 -0.708099,-0.424859 -0.542875,0 -1.203768,0.354049 -0.637289,0.330446 -1.085752,0.873322 v 7.199007 H 47.9145 Z" />
|
||||||
|
<path
|
||||||
|
d="m 68.46948,29.206055 h -2.336941 c -0.723901,0 -1.231902,-0.330446 -1.52413,-0.991339 -0.540631,0.755305 -1.432451,1.132958 -2.675616,1.132958 -0.928439,0 -1.703023,-0.236033 -2.323911,-0.708099 -0.602975,-0.487801 -0.823616,-1.26671 -0.661764,-2.336726 0.337985,-2.234446 2.383706,-3.509024 6.137727,-3.823735 0.07201,-0.676628 0.02713,-1.156562 -0.13465,-1.439801 -0.159415,-0.298975 -0.49163,-0.448463 -0.996615,-0.448463 -1.041532,0 -1.878432,0.574347 -2.510444,1.723041 h -0.567793 l -0.572928,-1.841057 c 1.404397,-1.038545 2.975321,-1.557818 4.712146,-1.557818 1.215777,0 2.09113,0.314711 2.625866,0.944132 0.552683,0.613686 0.719839,1.628628 0.501658,3.044826 l -0.72727,4.72066 c 0.0096,0.346181 0.09678,0.59795 0.261425,0.755305 0.16705,0.14162 0.46306,0.21243 0.888043,0.21243 z m -3.579715,-5.452363 c -0.977129,0.204562 -1.71325,0.535008 -2.208364,0.991339 -0.476836,0.440595 -0.757119,0.936264 -0.840938,1.487008 -0.1389,0.912661 0.232515,1.368991 1.114242,1.368991 0.440864,0 0.769542,-0.14162 0.986058,-0.424859 0.232298,-0.28324 0.447478,-0.763174 0.645545,-1.439801 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:url(#linearGradient7547);fill-opacity:1;stroke:none"
|
||||||
|
id="path1887"
|
||||||
|
inkscape:original-d="m 68.425725,29.206055 h -2.336727 q -1.085752,0 -1.675834,-0.991339 -0.637289,1.132958 -2.50195,1.132958 -1.392595,0 -2.43114,-0.708099 -1.014942,-0.731702 -1.014942,-2.336726 0,-3.351669 5.546776,-3.823735 -0.04721,-1.014942 -0.35405,-1.439801 -0.306843,-0.448463 -1.062148,-0.448463 -1.557818,0 -2.242314,1.723041 h -0.566479 l -0.849719,-1.841057 q 1.864661,-1.557818 4.461024,-1.557818 1.817454,0 2.761586,0.944132 0.967735,0.920529 0.967735,3.044826 v 4.72066 q 0.09441,0.519272 0.377653,0.755305 0.28324,0.21243 0.920529,0.21243 z m -4.413817,-5.452363 q -1.416198,0.306843 -2.053487,0.991339 -0.613686,0.660892 -0.613686,1.487008 0,1.368991 1.321785,1.368991 0.660892,0 0.920528,-0.424859 0.28324,-0.42486 0.42486,-1.439801 z" />
|
||||||
|
<path
|
||||||
|
d="m 70.85683,29.489294 c -0.456331,0 -0.809043,-0.110149 -1.058166,-0.330446 -0.249165,-0.220297 -0.344538,-0.519272 -0.286088,-0.896925 0.05601,-0.361917 0.241557,-0.645157 0.556657,-0.849719 0.317575,-0.220297 0.704721,-0.330446 1.161407,-0.330446 0.472433,0 0.833247,0.110149 1.082411,0.330446 0.251575,0.204562 0.34916,0.487802 0.292785,0.849719 -0.05883,0.377653 -0.247044,0.676628 -0.56462,0.896925 -0.317535,0.220297 -0.71232,0.330446 -1.184386,0.330446 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:url(#linearGradient7549);fill-opacity:1;stroke:none"
|
||||||
|
id="path1889"
|
||||||
|
inkscape:original-d="m 70.85683,29.489294 q -0.684496,0 -1.109355,-0.330446 -0.42486,-0.330446 -0.42486,-0.896925 0,-0.542876 0.42486,-0.849719 0.424859,-0.330446 1.109355,-0.330446 0.708099,0 1.132958,0.330446 0.42486,0.306843 0.42486,0.849719 0,0.566479 -0.42486,0.896925 -0.424859,0.330446 -1.132958,0.330446 z" />
|
||||||
|
<path
|
||||||
|
d="m 76.714684,17.097562 c 0.0665,-0.424859 0.268353,-0.755306 0.60558,-0.991339 0.355545,-0.251769 0.794127,-0.377653 1.315709,-0.377653 0.521583,0 0.912714,0.125884 1.173359,0.377653 0.278878,0.236033 0.384813,0.56648 0.317842,0.991339 -0.06201,0.393388 -0.270808,0.715966 -0.626355,0.967735 -0.353019,0.236033 -0.78218,0.35405 -1.287519,0.35405 -0.505339,0 -0.897423,-0.118017 -1.176289,-0.35405 -0.27645,-0.251769 -0.383905,-0.574347 -0.322327,-0.967735 z m 1.314965,12.108493 h -2.85626 l 1.308878,-8.355569 c 0.0419,-0.267504 0.01501,-0.448462 -0.08067,-0.542875 -0.09323,-0.110149 -0.281897,-0.165224 -0.565992,-0.165224 l 0.09598,-0.613685 3.120102,-0.56648 c 0.394727,0 0.54746,0.28324 0.458199,0.849719 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:url(#linearGradient7551);fill-opacity:1;stroke:none"
|
||||||
|
id="path1891"
|
||||||
|
inkscape:original-d="m 74.77497,17.097562 q 0,-0.637289 0.448463,-0.991339 0.472066,-0.377653 1.250975,-0.377653 0.778909,0 1.227372,0.377653 0.472066,0.35405 0.472066,0.991339 0,0.590082 -0.472066,0.967735 -0.472066,0.35405 -1.227372,0.35405 -0.755306,0 -1.227372,-0.35405 -0.472066,-0.377653 -0.472066,-0.967735 z m 3.210049,12.108493 H 75.12902 v -8.355569 q 0,-0.401256 -0.165223,-0.542875 -0.165223,-0.165224 -0.590083,-0.165224 v -0.613685 l 3.021223,-0.56648 q 0.590082,0 0.590082,0.849719 z" />
|
||||||
|
<path
|
||||||
|
d="m 81.320323,27.95508 c -0.716436,-0.944132 -0.947935,-2.21871 -0.6941,-3.823735 0.253835,-1.605024 0.880155,-2.871734 1.879343,-3.800131 1.017984,-0.944132 2.18243,-1.416198 3.492943,-1.416198 0.805255,0 1.459341,0.204562 1.962145,0.613686 l 0.586382,-3.658512 c 0.04792,-0.298975 0.03076,-0.487802 -0.05148,-0.566479 -0.07972,-0.09441 -0.277666,-0.14162 -0.593834,-0.14162 l 0.09821,-0.613686 3.127021,-0.566479 c 0.395361,0 0.558797,0.21243 0.490309,0.637289 l -2.351427,14.58684 h -2.856262 l 0.12106,-0.755306 c -0.505021,0.59795 -1.245296,0.896925 -2.220943,0.896925 -1.274637,0 -2.270964,-0.464198 -2.989373,-1.392594 z m 2.33611,-3.847338 c -0.155244,0.975603 -0.105533,1.801718 0.149014,2.478346 0.25439,0.676628 0.727918,1.014942 1.420704,1.014942 0.425119,0 0.934318,-0.180959 1.527691,-0.542876 L 87.06784,25.09908 c 0.257252,-1.605024 0.299416,-2.753718 0.126399,-3.446081 -0.157365,-0.692364 -0.512255,-1.038546 -1.064578,-1.038546 -0.615446,0 -1.144046,0.346182 -1.585688,1.038546 -0.438989,0.676628 -0.734799,1.494876 -0.88754,2.454743 z"
|
||||||
|
style="font-style:normal;font-family:Hostilica;-inkscape-font-specification:Hostilica;fill:url(#linearGradient7553);fill-opacity:1;stroke:none"
|
||||||
|
id="path1893"
|
||||||
|
inkscape:original-d="m 81.077043,27.95508 q -1.298181,-1.416198 -1.298181,-3.823735 0,-2.407536 1.274578,-3.800131 1.298181,-1.416198 3.257255,-1.416198 1.203768,0 2.053487,0.613686 V 15.87019 q 0,-0.448463 -0.14162,-0.566479 -0.141619,-0.14162 -0.613685,-0.14162 v -0.613686 l 3.021222,-0.566479 q 0.590083,0 0.590083,0.637289 v 14.58684 h -2.856 v -0.755306 q -0.613686,0.896925 -2.07709,0.896925 -1.911867,0 -3.210049,-1.392594 z m 1.723041,-3.847338 q 0,1.463404 0.542876,2.478346 0.542876,1.014942 1.581421,1.014942 0.637289,0 1.439801,-0.542876 V 25.09908 q 0,-2.407536 -0.424859,-3.446081 -0.401256,-1.038546 -1.227372,-1.038546 -0.920528,0 -1.416198,1.038546 -0.495669,1.014942 -0.495669,2.454743 z" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 34 KiB |
75
src/components/containers/AppBar.tsx
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import { ComponentProps } from "react";
|
||||||
|
|
||||||
|
import headerImg from "@/assets/images/header-img.gif";
|
||||||
|
import titleImg from "@/assets/images/title-img.svg";
|
||||||
|
import ahogeImg from "@/assets/images/furina-ahoge.svg";
|
||||||
|
import { Link, useLocation } from "react-router-dom";
|
||||||
|
import { cn } from "@/utility/utils";
|
||||||
|
|
||||||
|
const AppBar = () => {
|
||||||
|
return (
|
||||||
|
<header className="w-full bg-[#111a21] shadow">
|
||||||
|
<div className="container py-8 md:py-4 flex flex-col md:flex-row items-center gap-4">
|
||||||
|
<Link
|
||||||
|
to="/"
|
||||||
|
className="flex flex-col md:flex-row items-center gap-2 md:gap-4"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
src={headerImg}
|
||||||
|
alt="Furina gif by u/Quit-Creative"
|
||||||
|
className="h-12 md:h-16"
|
||||||
|
/>
|
||||||
|
<img src={titleImg} alt="Furina" className="h-6 md:h-10" />
|
||||||
|
</Link>
|
||||||
|
|
||||||
|
<Navbar>
|
||||||
|
<NavbarItem path="/" title="Home" />
|
||||||
|
<NavbarItem path="/furina-beloved" title="My Furina" />
|
||||||
|
</Navbar>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const Navbar = ({ children }: ComponentProps<"div">) => {
|
||||||
|
return (
|
||||||
|
<nav className="flex-1 flex items-center justify-end gap-3 md:gap-5 overflow-x-auto md:overflow-x-hidden">
|
||||||
|
{children}
|
||||||
|
</nav>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
type NavbarItemProps = {
|
||||||
|
path: string;
|
||||||
|
title: string;
|
||||||
|
isExact?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
const NavbarItem = ({ path, title, isExact = true }: NavbarItemProps) => {
|
||||||
|
const { pathname } = useLocation();
|
||||||
|
const isActive = isExact ? pathname === path : pathname.startsWith(path);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Link to={path} className="group flex items-center md:py-4">
|
||||||
|
<img
|
||||||
|
src={ahogeImg}
|
||||||
|
alt="ahoge"
|
||||||
|
className={cn(
|
||||||
|
"h-4 md:h-6 group-hover:-scale-x-100 transition-transform",
|
||||||
|
isActive ? "-scale-x-100" : ""
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<p
|
||||||
|
className={cn(
|
||||||
|
"text-white ml-2 md:ml-4 md:text-xl border-b-2 border-dotted group-hover:border-white/80 border-transparent transition-all",
|
||||||
|
isActive ? "border-white" : ""
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{title}
|
||||||
|
</p>
|
||||||
|
</Link>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AppBar;
|
33
src/components/layouts/MainLayout.tsx
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import { ComponentProps, Suspense } from "react";
|
||||||
|
import { Outlet } from "react-router-dom";
|
||||||
|
import AppBar from "../containers/AppBar";
|
||||||
|
import LoadingPage from "@/pages/misc/loading-page";
|
||||||
|
|
||||||
|
const MainLayout = ({ children }: ComponentProps<"div">) => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<AppBar />
|
||||||
|
|
||||||
|
<main>
|
||||||
|
{children ? (
|
||||||
|
children
|
||||||
|
) : (
|
||||||
|
<Suspense fallback={<LoadingPage />}>
|
||||||
|
<Outlet />
|
||||||
|
</Suspense>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<footer className="bg-primary-700 px-4 py-8 text-center">
|
||||||
|
<p className="text-sm text-white">
|
||||||
|
<a href="http://rul.sh/">
|
||||||
|
Made with <span className="text-red-300">♡</span> by Khairul.
|
||||||
|
</a>{" "}
|
||||||
|
Artworks displayed belong to respective owners.
|
||||||
|
</p>
|
||||||
|
</footer>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default MainLayout;
|
7
src/global.css
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
|
.container {
|
||||||
|
@apply mx-auto max-w-5xl px-4;
|
||||||
|
}
|
10
src/main.tsx
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import React from "react";
|
||||||
|
import ReactDOM from "react-dom/client";
|
||||||
|
import Loader from "./Loader";
|
||||||
|
import "./global.css";
|
||||||
|
|
||||||
|
ReactDOM.createRoot(document.getElementById("root")!).render(
|
||||||
|
<React.StrictMode>
|
||||||
|
<Loader />
|
||||||
|
</React.StrictMode>
|
||||||
|
);
|
14
src/pages/errors/error-boundary/page.tsx
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import MainLayout from "@/components/layouts/MainLayout";
|
||||||
|
|
||||||
|
const ErrorBoundaryPage = () => {
|
||||||
|
return (
|
||||||
|
<MainLayout>
|
||||||
|
<div className="min-h-[80vh] flex flex-col items-center justify-center text-center">
|
||||||
|
<h1 className="text-3xl font-medium">400 Bad Request.</h1>
|
||||||
|
<p className="mt-4">I think something is wrong here UwU</p>
|
||||||
|
</div>
|
||||||
|
</MainLayout>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ErrorBoundaryPage;
|
10
src/pages/errors/not-found/page.tsx
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
const NotFoundPage = () => {
|
||||||
|
return (
|
||||||
|
<div className="min-h-[80vh] flex flex-col items-center justify-center text-center">
|
||||||
|
<h1 className="text-3xl font-medium">404 Page Not Found.</h1>
|
||||||
|
<p className="mt-4">I think something is missing here UwU</p>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default NotFoundPage;
|
172
src/pages/furina-beloved/page.tsx
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
|
import coverImg from "@/assets/images/furina-cover.webp";
|
||||||
|
import buildImg from "@/assets/images/furina-build.webp";
|
||||||
|
import furinaChibiImg from "@/assets/images/113932900_p0_master1200.webp";
|
||||||
|
import copyIcon from "@/assets/icons/copy-outline.svg";
|
||||||
|
import playIcon from "@/assets/icons/play-outline.svg";
|
||||||
|
import skillAudio from "@/assets/audio/VO_JA_Furina_Elemental_Skill_1_04.ogg";
|
||||||
|
import { cn, copyToClipboard, showToast } from "@/utility/utils";
|
||||||
|
import { useEffect, useRef, useState } from "react";
|
||||||
|
import styles from "./style.module.css";
|
||||||
|
|
||||||
|
const gameUID = "828243224";
|
||||||
|
|
||||||
|
const FurinaBelovedPage = () => {
|
||||||
|
const onCopyUID = () => {
|
||||||
|
copyToClipboard(gameUID);
|
||||||
|
showToast("success", "UID copied!");
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<section>
|
||||||
|
<HeroBackground />
|
||||||
|
|
||||||
|
<div className="container flex items-center justify-center pt-10">
|
||||||
|
<SkillAudioPlayer />
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="container py-8 md:py-16">
|
||||||
|
<figure>
|
||||||
|
<a
|
||||||
|
href="https://enka.network/u/khairul169/4bLBVD/10000089/2778194/"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
src={buildImg}
|
||||||
|
alt="furina build"
|
||||||
|
className="w-full rounded-xl mt-8 hover:scale-105 transition-transform"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
<figcaption className="text-sm mt-2 text-center italic">
|
||||||
|
Furina build image generated using{" "}
|
||||||
|
<a
|
||||||
|
href="https://enka.network/"
|
||||||
|
className="font-bold text-primary-500 hover:underline"
|
||||||
|
>
|
||||||
|
enka.network
|
||||||
|
</a>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="py-16 md:py-20 flex flex-col items-center justify-center bg-primary-600 text-white">
|
||||||
|
<figure>
|
||||||
|
<img
|
||||||
|
src={furinaChibiImg}
|
||||||
|
alt="furina"
|
||||||
|
className={cn("h-60", styles.rotatingAnims)}
|
||||||
|
/>
|
||||||
|
<figcaption className="text-sm text-center text mt-2 italic">
|
||||||
|
Artwork by:{" "}
|
||||||
|
<a
|
||||||
|
href="https://www.pixiv.net/en/users/28173184"
|
||||||
|
className="text-white font-bold hover:underline"
|
||||||
|
>
|
||||||
|
ゆずとろ
|
||||||
|
</a>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<div className="bg-white text-slate-700 rounded-xl mt-8 px-6 md:px-8 py-4 md:py-6 lg:py-8 lg:px-10 flex flex-col items-center shadow text-center mx-4">
|
||||||
|
<p className="text-2xl text-black font-light">
|
||||||
|
Do you want to play with me?
|
||||||
|
<br />
|
||||||
|
🥺👉👈
|
||||||
|
</p>
|
||||||
|
<p className="text-lg mt-2">
|
||||||
|
Add:{" "}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className="font-bold text-primary-600 hover:scale-110 transition-transform active:scale-100"
|
||||||
|
onClick={onCopyUID}
|
||||||
|
>
|
||||||
|
{gameUID}
|
||||||
|
<img src={copyIcon} alt="copy uid" className="h-4 inline mx-1" />
|
||||||
|
</button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const HeroBackground = () => {
|
||||||
|
const [scrollY, setScrollY] = useState(0);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const onScroll = (e: Event) => {
|
||||||
|
const curScrollY = (e.currentTarget as any).scrollY;
|
||||||
|
setScrollY(Math.min(curScrollY, 500));
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener("scroll", onScroll);
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener("scroll", onScroll);
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="w-full bg-[length:100%_auto] hover:bg-[length:105%_auto] aspect-[1.8] md:aspect-[2.8] relative transition-all"
|
||||||
|
style={{
|
||||||
|
backgroundImage: `url(${coverImg})`,
|
||||||
|
backgroundPosition: `center ${40 - Math.min(scrollY / 400, 1.0) * 10}%`,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div className="absolute bottom-4 left-0 right-0 text-sm text-white">
|
||||||
|
<div className="container">
|
||||||
|
<p>Eclair (828243224)</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const SkillAudioPlayer = () => {
|
||||||
|
const skillAudioRef = useRef<HTMLAudioElement>(null);
|
||||||
|
const playingTimeout = useRef<any>(null);
|
||||||
|
const [isPlaying, setPlaying] = useState(false);
|
||||||
|
|
||||||
|
const onPlayAudio = () => {
|
||||||
|
skillAudioRef.current?.play();
|
||||||
|
setPlaying(true);
|
||||||
|
|
||||||
|
if (playingTimeout.current) {
|
||||||
|
clearTimeout(playingTimeout.current);
|
||||||
|
}
|
||||||
|
|
||||||
|
playingTimeout.current = setTimeout(() => {
|
||||||
|
setPlaying(false);
|
||||||
|
playingTimeout.current = null;
|
||||||
|
}, 4000);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className={`group flex flex-col items-center justify-center text-center border border-transparent hover:border-primary-500
|
||||||
|
rounded-xl px-6 py-4 hover:shadow transition-all hover:text-orange-500 hover:scale-105 active:scale-100 active:translate-y-5`}
|
||||||
|
onClick={onPlayAudio}
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
src={playIcon}
|
||||||
|
className={cn("h-8", isPlaying ? styles.playAnims : "")}
|
||||||
|
/>
|
||||||
|
<p className="text-xl font-light mt-4">
|
||||||
|
✮⋆{" "}
|
||||||
|
<span className="group-hover:text-purple-500">The curtain rises</span>{" "}
|
||||||
|
✩ ₊˚
|
||||||
|
</p>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<audio ref={skillAudioRef}>
|
||||||
|
<source src={skillAudio} type="audio/ogg" />
|
||||||
|
</audio>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default FurinaBelovedPage;
|
29
src/pages/furina-beloved/style.module.css
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
@keyframes rotating {
|
||||||
|
0%,
|
||||||
|
100% {
|
||||||
|
transform: rotate(8deg);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
transform: rotate(-8deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes play-anim {
|
||||||
|
0% {
|
||||||
|
transform: scale(100%) rotate(0);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
transform: scale(150%) rotate(150deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(100%) rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.rotatingAnims {
|
||||||
|
animation: rotating 3s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.playAnims {
|
||||||
|
animation: play-anim 2s infinite;
|
||||||
|
}
|
5
src/pages/home/page.tsx
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
const HomePage = () => {
|
||||||
|
return <div>HomePage</div>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default HomePage;
|
12
src/pages/misc/loading-page.tsx
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import loadingIllust from "@/assets/images/l9fsdoa2j7vb1.gif";
|
||||||
|
|
||||||
|
const LoadingPage = () => {
|
||||||
|
return (
|
||||||
|
<div className="min-h-[90vh] flex flex-col items-center justify-center text-center">
|
||||||
|
<img src={loadingIllust} className="h-40 animate-bounce" />
|
||||||
|
<p className="mt-2">Please wait a moment...</p>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default LoadingPage;
|
18
src/utility/utils.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import clsx from "clsx";
|
||||||
|
import { toast } from "react-toastify";
|
||||||
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
export const cn = (...classNames: any[]) => {
|
||||||
|
return twMerge(clsx(...classNames));
|
||||||
|
};
|
||||||
|
|
||||||
|
export const copyToClipboard = (data: string) => {
|
||||||
|
if (typeof navigator !== "undefined") {
|
||||||
|
navigator.clipboard.writeText(data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const showToast = (type: "success" | "error", message: string) => {
|
||||||
|
toast(message, { type });
|
||||||
|
};
|
1
src/vite-env.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/// <reference types="vite/client" />
|
27
tailwind.config.js
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/** @type {import('tailwindcss').Config} */
|
||||||
|
export default {
|
||||||
|
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
|
||||||
|
theme: {
|
||||||
|
extend: {
|
||||||
|
colors: {
|
||||||
|
primary: {
|
||||||
|
50: "#EFF5FA",
|
||||||
|
100: "#E0EBF5",
|
||||||
|
200: "#C5D9ED",
|
||||||
|
300: "#A5C5E3",
|
||||||
|
400: "#86B1DA",
|
||||||
|
500: "#6A9FD1",
|
||||||
|
600: "#3B7FBF",
|
||||||
|
700: "#2D6090",
|
||||||
|
800: "#1E4161",
|
||||||
|
900: "#0E1F2F",
|
||||||
|
950: "#071017",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
boxShadow: {
|
||||||
|
DEFAULT: "rgba(7,65,210,0.2) 0px 9px 20px",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [],
|
||||||
|
};
|
29
tsconfig.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES2020",
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
||||||
|
"module": "ESNext",
|
||||||
|
"skipLibCheck": true,
|
||||||
|
|
||||||
|
/* Bundler mode */
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"allowImportingTsExtensions": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"isolatedModules": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
|
||||||
|
/* Linting */
|
||||||
|
"strict": true,
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
"noUnusedParameters": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"@/*": ["./src/*"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"include": ["src"],
|
||||||
|
"references": [{ "path": "./tsconfig.node.json" }]
|
||||||
|
}
|
10
tsconfig.node.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"composite": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"module": "ESNext",
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"allowSyntheticDefaultImports": true
|
||||||
|
},
|
||||||
|
"include": ["vite.config.ts"]
|
||||||
|
}
|
13
vite.config.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import { defineConfig } from "vite";
|
||||||
|
import react from "@vitejs/plugin-react";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
// https://vitejs.dev/config/
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [react()],
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
"@": path.resolve("src/"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|