Compare commits
64 Commits
42235420b9
...
production
Author | SHA1 | Date | |
---|---|---|---|
5c97679188 | |||
6eb987ffdb | |||
f2f7798e83 | |||
e396883830 | |||
a783918241 | |||
f8a632b6df | |||
d92fc4cf6e | |||
8529e66e33 | |||
6c8a6e7c35 | |||
117e579f2e | |||
8ba72bc8a4 | |||
1823cd87b6 | |||
94d008ca7d | |||
9950665146 | |||
cbabdf8ccb | |||
b73a9f5b3f | |||
2909160b17 | |||
2ef59fee78 | |||
84cf03bd61 | |||
3cd6a975f9 | |||
15a7ffe120 | |||
b54de4ace0 | |||
7a283ababc | |||
eacb8a70d0 | |||
bc3d085c02 | |||
4112bca029 | |||
76aa42dc25 | |||
551f68a78a | |||
46a59c7b91 | |||
4cdb90eaf7 | |||
4934e8be67 | |||
886f21e0a2 | |||
495638c922 | |||
453376c024 | |||
4e35841df3 | |||
09edacf376 | |||
727fa976bd | |||
7634a3d616 | |||
a30c08c50c | |||
0d91acc0cf | |||
b65eabb723 | |||
102ab3991b | |||
e4176ba9c9 | |||
9fc338edd1 | |||
886da93809 | |||
615a89a1c6 | |||
991a8e0197 | |||
5a62633019 | |||
7a815b00b4 | |||
95167a6f8a | |||
f01c6ada17 | |||
79f4166946 | |||
ad7efc2223 | |||
6fe7509bdb | |||
1be8ebd16f | |||
8c2f2194d9 | |||
416c384f19 | |||
943d201a84 | |||
c768158ed0 | |||
ab316f2355 | |||
fbce353c1f | |||
002ebfe362 | |||
2cbdb66a4c | |||
cd309dc250 |
@ -1,4 +1,4 @@
|
|||||||
name: Deploy Application
|
name: Deploy Nuxt App
|
||||||
on: [push]
|
on: [push]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@ -8,27 +8,37 @@ jobs:
|
|||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
token: 0406afe7de6547e850dd62c84976c6def23a5193
|
token: ${{ secrets.TOKEN }}
|
||||||
|
|
||||||
- name: Install curl
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: '22'
|
||||||
|
|
||||||
|
- name: Install dependencies and build
|
||||||
run: |
|
run: |
|
||||||
if command -v apt-get &> /dev/null; then
|
npm install
|
||||||
apt-get update && apt-get install -y curl
|
npm run build
|
||||||
elif command -v apk &> /dev/null; then
|
|
||||||
apk add --no-cache curl
|
|
||||||
elif command -v yum &> /dev/null; then
|
|
||||||
yum install -y curl
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Upload config files to server
|
- name: Prepare deployment files
|
||||||
|
run: |
|
||||||
|
tar -czf deploy.tar.gz dist Dockerfile docker-compose.yml
|
||||||
|
|
||||||
|
- name: Upload files via Gitea API
|
||||||
env:
|
env:
|
||||||
GITEA_API: 'https://gitea.miduway.space/api/v1/repos/levis/ebook/raw/main'
|
GITEA_API: "https://gitea.miduway.space/api/v1/repos/levis/ebook/raw/main"
|
||||||
GITEA_TOKEN: '0406afe7de6547e850dd62c84976c6def23a5193'
|
GITEA_TOKEN: ${{ secrets.TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
for file in docker-compose.yml Dockerfile; do
|
for file in Dockerfile docker-compose.yml; do
|
||||||
echo "Uploading $file"
|
|
||||||
curl -X PUT \
|
curl -X PUT \
|
||||||
-H "Authorization: token $GITEA_TOKEN" \
|
-H "Authorization: token $TOKEN" \
|
||||||
|
-H "Content-Type: text/plain" \
|
||||||
-T "$file" \
|
-T "$file" \
|
||||||
"$GITEA_API/$file"
|
"$GITEA_API/$file?branch=main"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
curl -X PUT \
|
||||||
|
-H "Authorization: token $TOKEN" \
|
||||||
|
-H "Content-Type: application/gzip" \
|
||||||
|
-T "deploy.tar.gz" \
|
||||||
|
"$GITEA_API/deploy.tar.gz?branch=main"
|
||||||
|
11
.gitignore
vendored
@ -11,7 +11,15 @@ node_modules
|
|||||||
dist
|
dist
|
||||||
dist-ssr
|
dist-ssr
|
||||||
*.local
|
*.local
|
||||||
|
.nuxt
|
||||||
|
|
||||||
|
.output
|
||||||
|
.data
|
||||||
|
.nuxt
|
||||||
|
.nitro
|
||||||
|
.cache
|
||||||
|
dist
|
||||||
|
.history
|
||||||
# Editor directories and files
|
# Editor directories and files
|
||||||
.vscode/*
|
.vscode/*
|
||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
@ -22,6 +30,5 @@ dist-ssr
|
|||||||
*.njsproj
|
*.njsproj
|
||||||
*.sln
|
*.sln
|
||||||
*.sw?
|
*.sw?
|
||||||
|
package-lock.json
|
||||||
|
|
||||||
frontend.env
|
frontend.env
|
13
.htmlvalidate.json
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"root": true,
|
||||||
|
"extends": ["html-validate:recommended", "html-validate:standard"],
|
||||||
|
"rules": {
|
||||||
|
"heading-level": "error",
|
||||||
|
"require-img-alt": "error",
|
||||||
|
"element-permitted-content": "error",
|
||||||
|
"require-meta-title": "error",
|
||||||
|
"require-meta-description": "error",
|
||||||
|
"no-duplicate-id": "error",
|
||||||
|
"prefer-native-element": "error"
|
||||||
|
}
|
||||||
|
}
|
@ -1,2 +0,0 @@
|
|||||||
npm run lint
|
|
||||||
npm run format
|
|
3
.vscode/extensions.json
vendored
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"recommendations": ["Vue.volar"]
|
|
||||||
}
|
|
12
Dockerfile
@ -1,13 +1,7 @@
|
|||||||
FROM node:20 as builder
|
FROM node:22-slim
|
||||||
|
WORKDIR /usr/src/app
|
||||||
WORKDIR /app
|
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
RUN npm install
|
RUN npm install
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
CMD ["node", "dist/server/index.mjs"]
|
||||||
FROM nginx:alpine
|
|
||||||
COPY --from=builder /app/dist /usr/share/nginx/html
|
|
||||||
COPY ebook.conf /etc/nginx/conf.d/default.conf
|
|
||||||
EXPOSE 80
|
|
||||||
CMD ["nginx", "-g", "daemon off;"]
|
|
||||||
|
76
README.md
@ -1,27 +1,75 @@
|
|||||||
# Проект сайт vino Galante
|
# Nuxt Minimal Starter
|
||||||
|
|
||||||
## Описание проекта
|
Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
|
||||||
|
|
||||||
Интернет сайт Vino Galente создан для продажи книг за авторством...
|
## Setup
|
||||||
|
|
||||||
### Установка, для разработки
|
Make sure to install dependencies:
|
||||||
|
|
||||||
Копируем env
|
```bash
|
||||||
|
# npm
|
||||||
|
npm install
|
||||||
|
|
||||||
```
|
# pnpm
|
||||||
cp frontend.env frontend.env.example
|
pnpm install
|
||||||
|
|
||||||
|
# yarn
|
||||||
|
yarn install
|
||||||
|
|
||||||
|
# bun
|
||||||
|
bun install
|
||||||
```
|
```
|
||||||
|
|
||||||
Устанавливаем зависимости
|
## Development Server
|
||||||
|
|
||||||
```
|
Start the development server on `http://localhost:3000`:
|
||||||
yarn
|
|
||||||
|
```bash
|
||||||
|
# npm
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# pnpm
|
||||||
|
pnpm dev
|
||||||
|
|
||||||
|
# yarn
|
||||||
|
yarn dev
|
||||||
|
|
||||||
|
# bun
|
||||||
|
bun run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
Запуск dev
|
## Production
|
||||||
|
|
||||||
```
|
Build the application for production:
|
||||||
vite
|
|
||||||
|
```bash
|
||||||
|
# npm
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# pnpm
|
||||||
|
pnpm build
|
||||||
|
|
||||||
|
# yarn
|
||||||
|
yarn build
|
||||||
|
|
||||||
|
# bun
|
||||||
|
bun run build
|
||||||
```
|
```
|
||||||
|
|
||||||
Разворачивание, docker
|
Locally preview production build:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# npm
|
||||||
|
npm run preview
|
||||||
|
|
||||||
|
# pnpm
|
||||||
|
pnpm preview
|
||||||
|
|
||||||
|
# yarn
|
||||||
|
yarn preview
|
||||||
|
|
||||||
|
# bun
|
||||||
|
bun run preview
|
||||||
|
```
|
||||||
|
|
||||||
|
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
|
||||||
|
15
app.vue
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<template>
|
||||||
|
<NuxtLayout>
|
||||||
|
<!-- <link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" />
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Russo+One&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/> -->
|
||||||
|
<NuxtPage />
|
||||||
|
</NuxtLayout>
|
||||||
|
</template>
|
@ -1,9 +1,11 @@
|
|||||||
@import 'tailwindcss';
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
@theme {
|
:root {
|
||||||
--color-primary: rgba(255, 255, 255, 1);
|
--color-primary: rgba(255, 255, 255, 1);
|
||||||
--color-secondary: rgba(229, 30, 125, 1);
|
--color-secondary: rgba(229, 30, 125, 1);
|
||||||
--color-three: #e20c66;
|
--color-three: rgba(245, 75, 126, 1);
|
||||||
|
|
||||||
--color-accent-50: #f54378;
|
--color-accent-50: #f54378;
|
||||||
--color-accent-100: #e51e7d;
|
--color-accent-100: #e51e7d;
|
||||||
@ -11,39 +13,36 @@
|
|||||||
|
|
||||||
--color-black-50: #0c1018;
|
--color-black-50: #0c1018;
|
||||||
|
|
||||||
/*system colors*/
|
/* system colors */
|
||||||
--color-error: oklch(57.7% 0.245 27.325);
|
--color-error: oklch(57.7% 0.245 27.325);
|
||||||
--color-warning: oklch(76.9% 0.188 70.08);
|
--color-warning: oklch(76.9% 0.188 70.08);
|
||||||
|
|
||||||
/*disabled*/
|
/* disabled */
|
||||||
--color-text-disabled: oklch(55.1% 0.027 264.364);
|
--color-text-disabled: oklch(55.1% 0.027 264.364);
|
||||||
--color-bg-disabled: oklch(92.8% 0.006 264.531);
|
--color-bg-disabled: oklch(92.8% 0.006 264.531);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Кастомные классы шрифтов */
|
||||||
.lato-thin {
|
.lato-thin {
|
||||||
font-family: 'Lato', sans-serif;
|
font-family: 'Lato', sans-serif;
|
||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lato-light {
|
.lato-light {
|
||||||
font-family: 'Lato', sans-serif;
|
font-family: 'Lato', sans-serif;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lato-regular {
|
.lato-regular {
|
||||||
font-family: 'Lato', sans-serif;
|
font-family: 'Lato', sans-serif;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lato-bold {
|
.lato-bold {
|
||||||
font-family: 'Lato', sans-serif;
|
font-family: 'Lato', sans-serif;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lato-black {
|
.lato-black {
|
||||||
font-family: 'Lato', sans-serif;
|
font-family: 'Lato', sans-serif;
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
@ -55,25 +54,21 @@
|
|||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lato-light-italic {
|
.lato-light-italic {
|
||||||
font-family: 'Lato', sans-serif;
|
font-family: 'Lato', sans-serif;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lato-regular-italic {
|
.lato-regular-italic {
|
||||||
font-family: 'Lato', sans-serif;
|
font-family: 'Lato', sans-serif;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lato-bold-italic {
|
.lato-bold-italic {
|
||||||
font-family: 'Lato', sans-serif;
|
font-family: 'Lato', sans-serif;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lato-black-italic {
|
.lato-black-italic {
|
||||||
font-family: 'Lato', sans-serif;
|
font-family: 'Lato', sans-serif;
|
||||||
font-weight: 900;
|
font-weight: 900;
|
3
assets/icon/arrow.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="14" height="20" viewBox="0 0 14 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.9401 11.1109L2.9533 20L0.457031 17.7781L9.19574 10L0.457031 2.22187L2.9533 0L12.9401 8.88906C13.2711 9.18373 13.457 9.58334 13.457 10C13.457 10.4167 13.2711 10.8163 12.9401 11.1109Z" fill="white"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 354 B |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
BIN
assets/img/png/book1.png
Normal file
After Width: | Height: | Size: 208 KiB |
BIN
assets/img/png/book2.png
Normal file
After Width: | Height: | Size: 218 KiB |
BIN
assets/img/png/footer-flowers-2.png
Normal file
After Width: | Height: | Size: 746 KiB |
BIN
assets/img/png/shadow.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
assets/img/webp/footer-flowers-2.webp
Normal file
After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 206 KiB After Width: | Height: | Size: 206 KiB |
BIN
assets/img/webp/gradient.webp
Normal file
After Width: | Height: | Size: 251 KiB |
BIN
assets/img/webp/group-flowers.webp
Normal file
After Width: | Height: | Size: 409 KiB |
BIN
assets/img/webp/header-flowers-1.webp
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
assets/img/webp/header-flowers-2.webp
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
assets/img/webp/header-flowers-3.webp
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
assets/img/webp/header-flowers-4.webp
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
assets/img/webp/hero-banner-content.webp
Normal file
After Width: | Height: | Size: 613 KiB |
BIN
assets/img/webp/hero-flowers.webp
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
assets/img/webp/vino-galante.webp
Normal file
After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 496 B After Width: | Height: | Size: 496 B |
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<component
|
<component
|
||||||
:is="tag"
|
:is="tag"
|
||||||
class="font-semibold text-twilight-900"
|
class="font-semibold"
|
||||||
:class="[
|
:class="[
|
||||||
{
|
{
|
||||||
'text-3xl md:text-4xl lg:text-5xl 2xl:text-6xl': size === '600',
|
'text-3xl md:text-4xl lg:text-5xl 2xl:text-6xl': size === '600',
|
@ -16,7 +16,10 @@
|
|||||||
'text-lg lg:text-[20px]': size === '300',
|
'text-lg lg:text-[20px]': size === '300',
|
||||||
}, // 16px
|
}, // 16px
|
||||||
{
|
{
|
||||||
'text-sm': size === '200',
|
'text-[15px]': size === '250',
|
||||||
|
}, // 15px
|
||||||
|
{
|
||||||
|
'text-[13px]': size === '200',
|
||||||
}, // 14px
|
}, // 14px
|
||||||
]"
|
]"
|
||||||
>
|
>
|
17
components/UiButton/UiButton.params.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
export const colorVariants = {
|
||||||
|
primary: [
|
||||||
|
"bg-accent-50",
|
||||||
|
"text-primary",
|
||||||
|
"hover:bg-accent-100",
|
||||||
|
"active:bg-accent-150",
|
||||||
|
],
|
||||||
|
secondary: [
|
||||||
|
"bg-transparent",
|
||||||
|
"text-primary",
|
||||||
|
"hover:bg-accent-50",
|
||||||
|
"border-accent-50",
|
||||||
|
"border",
|
||||||
|
"hover:bg-accent-100",
|
||||||
|
"active:bg-accent-150",
|
||||||
|
],
|
||||||
|
};
|
46
components/UiButton/UiButton.vue
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<template>
|
||||||
|
<component
|
||||||
|
:is="tag"
|
||||||
|
:type="tag === 'button' ? 'button' : ''"
|
||||||
|
class="px-14 py-4 rounded-[20px] text-[30px] cursor-pointer shadow-[0px_16px_50px_-16px_rgba(229,30,125,1)]"
|
||||||
|
:class="[baseStyle, size]"
|
||||||
|
data-ui="ui-button"
|
||||||
|
>
|
||||||
|
<slot />
|
||||||
|
</component>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { toRefs, computed } from "vue";
|
||||||
|
import { colorVariants } from "./UiButton.params.js";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
tag: {
|
||||||
|
type: String,
|
||||||
|
default: "button",
|
||||||
|
},
|
||||||
|
variants: {
|
||||||
|
type: String as () => "primary" | "secondary",
|
||||||
|
default: "primary",
|
||||||
|
validator: (value) => {
|
||||||
|
return ["primary", "secondary"].includes(value as string);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
size: {
|
||||||
|
type: String,
|
||||||
|
default: "font-bold",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const { tag, variants, size } = toRefs(props);
|
||||||
|
|
||||||
|
const colorClasses: Record<"primary" | "secondary", string[]> = {
|
||||||
|
primary: colorVariants.primary,
|
||||||
|
secondary: colorVariants.secondary,
|
||||||
|
};
|
||||||
|
|
||||||
|
const baseStyle = computed(() => {
|
||||||
|
const variant = variants.value as "primary" | "secondary";
|
||||||
|
return colorClasses[variant]?.join(" ") || "";
|
||||||
|
});
|
||||||
|
</script>
|
@ -1,14 +1,20 @@
|
|||||||
<template>
|
<template>
|
||||||
<UiParagraph
|
<UiParagraph
|
||||||
class="cursor-pointer"
|
class="cursor-pointer"
|
||||||
tag="span"
|
as="span"
|
||||||
size="300"
|
size="250"
|
||||||
v-for="({ path, name, target }, index) in navContent"
|
v-for="({ path, name, target }, index) in navContent"
|
||||||
:key="index"
|
:key="index"
|
||||||
|
data-ui="ui-nav"
|
||||||
>
|
>
|
||||||
<component :is="target ? 'a' : 'RouterLink'" :to="path" :href="path" :target="target">{{
|
<component
|
||||||
name
|
data-ui="ui-nav-btn"
|
||||||
}}</component>
|
:is="target ? 'a' : 'RouterLink'"
|
||||||
|
:to="path"
|
||||||
|
:href="path"
|
||||||
|
:target="target"
|
||||||
|
>{{ name }}</component
|
||||||
|
>
|
||||||
</UiParagraph>
|
</UiParagraph>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
28
config/head.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
export default {
|
||||||
|
meta: [
|
||||||
|
{ charset: "utf-8" },
|
||||||
|
{
|
||||||
|
name: "viewport",
|
||||||
|
content:
|
||||||
|
"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
link: [
|
||||||
|
{
|
||||||
|
rel: "preconnect",
|
||||||
|
href: "https://fonts.googleapis.com",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
rel: "preconnect",
|
||||||
|
href: "https://fonts.gstatic.com",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
rel: "stylesheet",
|
||||||
|
href: "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
rel: "stylesheet",
|
||||||
|
href: "https://fonts.googleapis.com/css2?family=Russo+One&display=swap",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
11
config/index.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import modules from "./modules";
|
||||||
|
import sitemap from "./sitemap";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
modules,
|
||||||
|
sitemap,
|
||||||
|
typescript: {
|
||||||
|
strict: true,
|
||||||
|
typeCheck: true,
|
||||||
|
},
|
||||||
|
};
|
13
config/modules.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
export default [
|
||||||
|
'@nuxt/eslint',
|
||||||
|
'@nuxt/icon',
|
||||||
|
'@nuxt/image',
|
||||||
|
'@nuxt/content',
|
||||||
|
// '@nuxt/fonts',
|
||||||
|
'@pinia/nuxt',
|
||||||
|
'@nuxtjs/tailwindcss',
|
||||||
|
'@pinia/nuxt',
|
||||||
|
'@nuxtjs/html-validator',
|
||||||
|
// '@nuxtjs/robots',
|
||||||
|
// '@nuxtjs/sitemap',
|
||||||
|
]
|
12
config/sitemap.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// ./sitemap.config.ts
|
||||||
|
export default {
|
||||||
|
siteUrl: 'https://ebook.miduway.space',
|
||||||
|
|
||||||
|
// Примеры маршрутов, можно заменить на API-запрос
|
||||||
|
urls: [
|
||||||
|
{ loc: '/books/1' },
|
||||||
|
{ loc: '/books/1/title-1' },
|
||||||
|
{ loc: '/books/2/title-2' },
|
||||||
|
{ loc: '/books/2' },
|
||||||
|
],
|
||||||
|
}
|
10
content.config.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { defineContentConfig, defineCollection } from '@nuxt/content'
|
||||||
|
|
||||||
|
export default defineContentConfig({
|
||||||
|
collections: {
|
||||||
|
books: defineCollection({
|
||||||
|
type: 'page',
|
||||||
|
source: '/books/*.md',
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
69
content/books/1.md
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<div style="color: #f54b7e; font-weight: bold; font-size: 1.5em;">Глава 1. Перезагрузка</div>
|
||||||
|
|
||||||
|
### Введение
|
||||||
|
|
||||||
|
  Название первой главы - “Перезагрузка”. Как ты думаешь, почему? Потому что всё начинается с твоей головы и только с твоей головы. Суть этой главы - выработать в тебе правильное отношение к мужчинам. Правильное значит такое, которое тебе позволит нами управлять, хотя и неявно. Если ты хочешь иметь успех у мужчин, тебе просто необходимо правильно к нам относиться. Тебе нужна правильная система взглядов. Ты должна знать, по каким законам функционирует система “мужчина”. В противном случае ты обречена на провал, независимо от внешних данных, финансовой ситуации и всего остального.<br/>
|
||||||
|
Пример. С чего начинается обучение водительскому мастерству? Правильно, с теории. На курсах вождения тебе объясняют, по каким правилам и законам движутся автомобили. Зная эти правила, ты можешь безопасно передвигаться в мегаполисе. Т.е. используя машину, ты добираешься из пункта “А” в пункт “Б”. Т.е. ты достигаешь своей цели быть в пункте “Б”, приехать на работу, например.<br/>
|
||||||
|
  То же самое и в соблазнении. Все те убеждения соблазнительницы, с которыми ты ознакомишься в этой главе, такие же правила безопасности дорожного движения. Если твои нынешние убеждения относительно парней сильно разнятся с истинными, то ты просто не можешь иметь настоящий успех у мужчин. Мне очень повезло в жизни - не знаю почему, но я встретился с одной очень хорошей правильной девушкой. Девушка очень красивая, но с парнями на тот момент у нее был явный недобор. Все, что ей мешало иметь колоссальный успех у парней - неправильное отношение к мужчинам. Например, она считала, что мужчина первым должен проявлять активность, а девушка при этом вообще ничего не должна делать. Прошло полгода, теперь она проводит в день по три свидания, ей дарят золото, за ней ухаживают очень классные парни, такие, от которых у обычной девушки текут слюнки. Ей уже поступило несколько предложений о замужестве.
|
||||||
|
Что же позволило ей так возвыситься над обычными девушками? Ответ ты найдешь в этой главе.
|
||||||
|
|
||||||
|
### <span style="color: #f54b7e;">Убеждения соблазнительницы</span>
|
||||||
|
|
||||||
|
_"Мы формируем свои убеждения в детстве,_<br/>
|
||||||
|
_а потом движемся по жизни, воссоздавая_<br/>
|
||||||
|
_ситуации, которые подошли бы нашим убеждениям."_ <br/>
|
||||||
|
_Луиза Хей_
|
||||||
|
|
||||||
|
  Ты наверно думаешь, что успешная соблазнительница - это такая очень красивая девушка, понимающая все тонкости в моде и умеющая соблазнительно кокетничать? У нее обязательно должны быть длинные красивые ноги и осиная талия? Вся такая Мэрилин Монро? Тогда я не завидую твоей способности общаться с мужчинами. Сейчас я разобью эти глупые убеждения, созданные рекламой и всей этой телевизионной шелухой. Но мне надо, чтобы ты сама думала, сама использовала свой самый главный актив - свой мозг. Поэтому ответь на вопрос - какова была личная жизнь Мэрилин Монро? Ответила? Спасибо. Теперь ответь на следующий вопрос - какова личная жизнь типичной очень красивой девушки? Ответила? Спасибо. А теперь правильные ответы.<br/>
|
||||||
|
  Мэрилин Монро, эта актриса, певица и, самое главное, секс-символ Америки 50 ÷ 60 годов прошлого столетия, была 3 раза замужем и умерла в очень молодом возрасте (всего 36 лет) от передозировки снотворного. Мдаа.<br/>
|
||||||
|
Первый муж - Джим Дагерти, то ли моряк, то ли еще не пойми кто. Мэрилин было всего 16 лет, когда они поженились. Совсем ребенок еще. Характеризовала брак как ошибку молодости. Второй брак. Какой-то Джо Ди Маджо, звезда бейсбола. Брак просуществовал всего 9 месяцев. Мужик был необычайно ревнив и ревновал Мэрилин даже к публике. Ему было сложно терпеть ее популярность. Если брак даже и год не продержался, значит это был изначально один большой косяк, а не брак. Ладно, кратко о последнем браке. Третий муж - Артур Миллер. Драматург. Вроде более-менее брак. Продержался 4.5 года. Ходят слухи о четвертом браке и о том, что на Мэрилин залезал президент США Кеннеди. И вроде как причина смерти Мэрилин - убийство, т.к. она начала заявлять свои права на президента, и тот, чтобы устранить проблему, устранил любовницу.
|
||||||
|
Из этой истории, так напоминающей кальку современной жизни, делаем следующие выводы:
|
||||||
|
|
||||||
|
1. Сама по себе красота, даже если это дьявольски привлекательная красота, ничего не дает.
|
||||||
|
2. Так, желаемая всеми популярность абсолютно не гарантирует счастья в личной жизни.<br/><br/>
|
||||||
|
Пока остановимся на этих двух выводах.<br/>
|
||||||
|
  Еще в недавнем прошлом моей слабостью были модели. Они такие красивые, утонченные, у них длинные изящные пальцы - не девушки, а сплошное загляденье. И главное, они недоступны для обычных парней. Сколько раз я видел, как мужики сворачивали головы, провожая взглядом мою очередную спутницу. Конечно! В школу моделей берут всех, в модели - единицы. Самое интересное - наблюдать за реакцией парней. Вначале они бросают взгляд на девушку, примерно через секунду на меня. Если я делаю морду кирпичом - убирают взгляд, если нет - снова смотрят на девушку. Их можно понять, ведь по-настоящему красивая девушка - это истинное произведение искусства. Сам Бог ваяет настоящих моделей. И, естественно, у меня было много моделей и не только из моего города. И как ты думаешь, что я тебе скажу о них? Многие из них несчастны в личной жизни. Это просто парадоксально! Как могут быть несчастны такие красавицы?!<br/>
|
||||||
|
  Вначале я удивлялся, потом привык. Да ты хотя бы посмотри на мисс Вселенная Оксану Федорову. Полнейшая неразбериха в личной жизни. Она же мисс Вселенная! Представляешь?! Официально она самая красивая девушка планеты Земля в 2002-м году.<br/>
|
||||||
|
  Она могла выбрать любого. А красавица Дениз Ричардс? В 2002-м в возрасте 31 года вышла замуж за актера Чарли Шина. Как можно было выходить замуж за такого дегенерата? Чарли Шин известен своими многочисленными скандалами в личной и общественной жизни, он наркоман. В 2011 году Шин был уволен компаниями CBS и Warner Bros. Television. Мдаа. С 2011 года этот актер живет с Бри Олсон. Бри Олсон -порноактриса. Кто такая порноактриса? Порноактриса это всего лишь помойное ведро, она отсосет у любого, на кого укажет режиссер. Надо иметь весьма убогий разум, чтобы жить со шлюхой. И вот Дениз, живое воплощение женской красоты, выбрала для себя такого недочеловека. Прожив четыре года, они разошлись. Дениз осталась с двумя детьми.<br/>
|
||||||
|
  Во истину покажите мне красивую, нет, очень красивую девушку, и я покажу вам трагедию. К чему это я все? А к тому, что главное в тебе - это твои мозги. Главное в тебе - это твои установки и ценности, которыми ты руководствуешься в жизни, твои глубинные убеждения. И если ты будешь женственной, нежной девушкой и, самое главное, умной, ты стопроцентно найдешь себе достойного человека. В этом просто нет никаких сомнений.<br/>
|
||||||
|
  Теперь посмотрим на жен успешных людей. На женщин, у которых в личной жизни все тип-топ. Кого же взять на рассмотрение? А давай-ка возьмем царицу нашей страны - Светлану Владимировну Медведеву (фотографии смотри в интернете). Это жена действующего президента нашей страны Дмитрия Анатольевича Медведева. Родилась 15-го марта 1965 года в Кронштадте, детство провела в деревне Коваши. По одним данным вышла замуж в 24 года, по другим в 28. Ну что тут сказать? Смотри фотографии и делай выводы сама. В жизни сплошь и рядом девушки с самой заурядной внешностью удачно выходят замуж. Почему? Читай дальше.
|
||||||
|
|
||||||
|
_  Задание. Найди информацию, например, биографии о пяти женщинах, успешных в личной жизни и о пяти женщинах, несчастных в личной жизни. Проанализируй их и сделай хотя бы по 5 выводов о том, что же объединяет женщин успешных и что объединяет женщин не успешных. Таким образом, в сумме ты получишь 10 выводов. Обращай внимание не только на убеждения или установки, но и на то, какое воспитание получили девочки в детстве, в каких семьях росли, какова судьба их матерей и т.д. После 10 общих выводов в тебе должна родиться одна главная мысль, один общий вывод. Сделай это, потом читай дальше._
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
  Я верю в тебя и поэтому знаю, что общий вывод, который ты сделаешь сама для себя, будет таким: 99% успеха в соблазнении зависит от твоих ценностей, доминантных мыслей, убеждений, отношения к жизни, к мужчинам, т.е. всего того, что находится в твоей голове. И почти не зависит от природных внешних данных, места рождения, текущей финансовой ситуации и т.п. Сейчас я приведу убеждения успешной соблазнительницы, которые ты должна выучить как Отче наш и которые ты обязана проверить на практике. Все до единого! Вот этот ключ, открывающей тебе дорогу в долину любых отношений, которые ты только захочешь иметь. Они позволят тебе играть с мужчинами как кошка с мышкой и брать от них то, о чем обычная девушка не может и мечтать. Вот они:
|
||||||
|
|
||||||
|
1. Всё всегда хорошо
|
||||||
|
2. Другие девушки не помеха для меня
|
||||||
|
3. Парней много, я одна
|
||||||
|
4. Использовать мужчин естественно и приятно
|
||||||
|
5. Отшивать мужчин - это естественно
|
||||||
|
6. Ты имеешь ровно то, что заслужила
|
||||||
|
7. Ты достойна гораздо большего
|
||||||
|
8. Все мечты достижимы
|
||||||
|
9. Проявлять активность девушке естественно
|
||||||
|
10. Мужчины до замужества - тренажеры
|
||||||
|
11. Мужчина должен относиться уважительно
|
||||||
|
12. Среди мужчин есть идиоты
|
||||||
|
13. Желание секса от мужчины - это нормально
|
||||||
|
14. Мужчины общаются, когда им что-то нужно
|
||||||
|
15. Пока не было секса - ты не проиграла
|
||||||
|
16. Удовольствие от общения = всё по плану
|
||||||
|
17. Ты ничего не должна мужчине
|
||||||
|
18. Соблазнение - интересная игра
|
||||||
|
19. Ахиллесовы пяты мужчин: эго и секс
|
||||||
|
20. Мужчины - хорошие создания
|
||||||
|
21. Мужчины не примитивны
|
||||||
|
22. Мужчинам нужно не только секс
|
||||||
|
23. Смысл жизни - развитие
|
||||||
|
24. Запасной аэродром - это нормально
|
||||||
|
25. Сексом мужчину не удержать
|
||||||
|
26. Общение должно приносить радость
|
||||||
|
27. Мужчины любят высокоранговых женщин
|
||||||
|
28. Мир - отражение тебя самой
|
||||||
|
|
||||||
|
  А теперь остановимся подробнее на каждом из этих убеждений. Надо сказать, что ты можешь высечь все эти убеждения на камне и использовать этот камень у себя вместо спальной подушки. Ты должна на собственном опыте убедиться в правоте этих убеждений. Эти убеждения - не что-то волшебное. Они просто сама суть жизнь, реальное положение вещей. Всё перечисленное - факты. Зная настоящие правила игры, ты получаешь шанс выиграть в этой игре. Только так, а руководствуясь ложными убеждениями ты всегда будешь оставаться в дурах.<br/>
|
||||||
|
  Если ты хочешь достичь определенной цели - тебе нужны истинные знания. Только истинные знания позволят достичь цели. Все неистинные знания (ложь) забирают твое время, силы и уводят от нужного результата. Если бы ты могла жить вечно и при этом сохранить свою привлекательность, тебе не понадобилась бы эта книга. Просто экспериментируя и набивая себе шишки, исследовав все ложные тропы, ты нашла бы одну истинную и достигла бы нужного тебе результата. Но в жизни не так. У успешных спортсменов - выдающиеся тренера. У успешных бизнесменов - выдающиеся наставники. Человек даже писать и читать без учителя не научится. И в соблазнении у тебя есть учителя, только это слабые и некомпетентные учителя, поэтому учась у них, ты останешься такой же некомпетентной. Кто твои учителя? Правильно, это те люди, с которыми ты общаешься на темы соблазнения, т.е. твои подруги. Возможно, мама. Это уже лучше. Потому что она-то уж точно желает тебе добра, а насчет подруг - большой вопрос. В общем, послушай человека, достигшего определенных успехов в этом вопросе, т.е. меня. Даже если ты просто прочитаешь эту книгу, тебе станет гораздо легче. А уж если ты и задания будешь выполнять, а потом изучишь и вторую мою книгу… Истинно тебе говорю - ты будешь смеяться над своим текущим уровнем в общении с парнями.<br/>
|
||||||
|
  Ты что-нибудь знаешь про метод тотальной бомбежки? Есть такой метод. Сделай себе шпаргалку с этими убеждениями, заглядывай в нее каждые полчаса и размышляй над тем убеждением, которое первым бросится тебе в глаза. Думай и думай - задавай себе вопросы - “А почему так? Какая мне польза от этого убеждения? Какие истории из моей жизни или жизни моих подруг подтверждают правильность этих убеждений?” Твой мозг должен вскипеть от такой работы. Думай и думай над этими убеждениями. Выучи их наизусть так, чтобы они от зубов твоих отлетали. После этого ты должна “вылизать”, “обсосать” каждое из этих убеждений, обсмаковать, понять в тончайших деталях, а это уже делается только на практике и только с помощью практики. Обязательно проверь их на практике, впитай в себя, а не то грош цена всем твоим стараниям.<br/>
|
||||||
|
  Многие из этих убеждений очень глубокие, глубже и мощнее наших океанов, и для того, чтобы они стали частью тебя, тебе потребуется много практики и несколько лет жизни. Но это стоит того. Всё, что ты тратишь на улучшение - это только время и старания. Больше ничего. И это ничтожная цена за то, кем ты станешь. После всего пары лет упорной работы ты настолько изменишься в лучшую сторону, что будешь смотреть на себя теперешнюю как на слепого котенка. Тебе будет смешно. Ты будешь смотреть на своих сверстниц и ощущать огромнейшую разницу между тобой и ними. Тебе захочется им помочь, ты будешь смотреть на них, как на слепых котят, которые бьются головой об ножку стула и не могут ее обойти. Ты также будешь насквозь видеть мужчин, ты будешь чувствовать, на каком этапе игра, все будет под твоим контролем. Ты выйдешь на недостижимый для миллионов девушек уровень. У тебя откроются глаза. Ты ни за что не захочешь возвращаться в свое текущее состояние. Но для этого тебе надо начать действовать, да, черт подери, тупо начать действовать! Первый этап работы - перепрошивка мозга.<br/>
|
||||||
|
  Итак, убеждения.
|
35
content/books/2.md
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<div style="color: #f54b7e; font-weight: bold; font-size: 1.5em;">Глава 2. Ближний бой</div>
|
||||||
|
|
||||||
|
### <span style="color: #f54b7e;">Введение</span>
|
||||||
|
|
||||||
|
  Эта глава — самая важная глава в моей второй книге. Умение калибровать, несомненно, тоже важно. Но калибровать — природный дар девушек, вы очень быстро этому и обучаетесь, и изначально почти умеете. Именно поэтому во второй книге я сделал акцент не на калибровке, а именно на умении так влюбить в себя парня, что он будет помнить тебя даже перед лицом смерти. Техники влюбления… здесь я рассказываю далеко не очевидные вещи. Но они очень важны, очень. Крутую соблазнительницу от неопытной девушки отличают действия. Если они обе одинаково красивы, одинаково стильны, одинаково умны и приветливы, то всё, что их отличает, это действия. Соблазнительница просто действует по-другому, она делает другие вещи. Вот и всё. И я еще раз повторяю, ты не сможешь сама догадаться до тех фишек, которые проворачивает соблазнительница. Те фишки, о которых ты узнаешь из моей книги, я смог синтезировать, только на основе моего опыта и природной склонности к анализу. Физико-математический лицей и 4 года аспирантуры сделали свое дело. У меня есть природная склонность анализировать, я люблю думать. Мне нравится сам процесс мышления. Чтобы начать думать в правильном русле, нужны правильные знания, правильный опыт. На приобретение этого пресловутого опыта в лучшем случае может уйти год. У меня ушло больше, не было наставника. Приходилось до многих вещей доходить самому[1] .
|
||||||
|
Но видимо у тебя хорошая карма, если в своих руках ты держишь эту книгу. Поэтому я не буду тебе рассказывать всякую чушь, которую пишут авторы-женщины в своих псевдо-учебниках по скрытому управлению мужчинами, соблазнению и т.д. Я пишу самую суть правды. Хотя, может это и не так уж плохо, что в теме соблазнения мужчин, все авторы — сплошные лохушки, пишущие о ширине твоего каблука, который должен быть на первом свидании. Что тебе идет, то и носи. Вот и вся правда про одежду. На фоне авторов, ничего не смыслящих в соблазнении, я выгляжу круче. Я удовлетворяю свой эгоизм, свою самовлюбленность и прочие черные стороны своей личности. Мой уровень, то качество материала, который я выдаю, становятся еще выше и качественнее на фоне псевдоспециалистов. Обычные авторы, которые пишут про соблазнение — это псевдоспециалисты. Спасибо вам, авторы-лохи, вы позволяете ощутить мне свою исключительность. А любому мужчине это очень приятно.
|
||||||
|
|
||||||
|
### <span style="color: #f54b7e;">Техника влюбления</span>
|
||||||
|
|
||||||
|
_Здесь даются реальные знания._<br/>
|
||||||
|
_Гарвард_
|
||||||
|
|
||||||
|
  Механизм мужской и женской влюбленностей<br/>
|
||||||
|
Механизмы мужской и женской влюбленностей несколько разнятся. Т.е. мужчины и женщины, парни и девушки влюбляются по-разному. У девушек крышу сразу не сносит, а у парней крышу сносит именно сразу. В этом и заключается принципиальное различие в механизмах. Безусловно, эта разница — классика, поэтому на этот счет есть вариации. Однако, по своей сути, так оно и есть. На первых порах отношений девушка способна трезво оценивать парня. Она еще не влюбилась, она оценивает, присматривается, приценивается к парню. Он ей нравится, но она может трезво мыслить. Видишь эти два графика ниже по тексту[2]? Теперь ты понимаешь различие в механизмах.
|
||||||
|
Когда отношения с девушкой только начинаются, когда еще не было секса, парень испытывает некое подобие эйфории и одновременной зависимости от девушки. Я опять же говорю о классическом случае. Парень пытается быть максимально хорошим для нее. Она ему нравится, он запал на нее. Все его мысли — о ней. Девушка же влюбляется с задержкой по времени, когда парень пройдет ее фильтры. Когда у нее “щелкнет” в голове, тогда она и влюбляется.
|
||||||
|
|
||||||
|

|
||||||
|
Рисунок 5 — Различия между мужской и женской схемами влюбления<br/>
|
||||||
|
_Иллюстрация создана автором книги_
|
||||||
|
|
||||||
|
  Смотри, как выгодно для тебя устроила природа. Ты еще ничего не сделала в плане развития отношений, но уже имеешь бонус. Красота!! Спасибо матери-природе. Такой механизм — следствие заботы о выживании рода, вида. Вид должен выжить. Поэтому тебе дается время на фильтрацию самцов, чтобы ты могла выбрать лучшего и получить его семя. Самый живучий самец, самец, обошедший своих сородичей, самый жизнеспобный, способен дать тебе лучшее семя среди своих представителей. Так ты сможешь родить наиболее жизнеспособного ребенка, самого живучего. Забеременев же от слабого самца, ты родишь слабое потомство. Именно из-за такого механизма выживания вида парень сразу испытывает влечение к девушке, но после первого секса сразу же остывает к ней. Его задача выполнена, он оплодотворил самку. Его следующая задача — найти новую самку и оплодотворить ее. Поэтому он также быстро “западает” на следующую, трахает ее, остывает к ней и ищет новую. Парень выполняет задачу продолжения рода: совокупляется с максимальным количеством девушек.
|
||||||
|
Но для нас с тобой сейчас самое важное — работать в зоне t — фильтрации. Как раз в период, который тебе подарила мать-природа, ты должна работать над отношениями. Тебе дали бонус в виде времени, не просри его. Те фишки, которые я тебе даю, имеют максимальную эффективность как раз в период фильтрации самцов. Как только вы переспите, период фильтрации закончится. И эффективность любых манипулятивных фишек, даже от Вино Галанте, упадет в разы. Это же так просто!! Ты пропустила парня через свои фильтры. Мать-природа позаботилась о том, чтобы сразу после этого ему захотелось другую самку. Как только ему захотелось другую, тебе становится архисложно влиять на парня. Природа, природа, против нее не поспоришь.
|
||||||
|
Сколько времени длится период фильтрации самцов? Запомни, в соблазнении отсутствует время как таковое, в соблазнении присутствует качество. Поэтому период фильтрации может длиться один час, а может год или два. Здесь все зависит от твоего уровня. Но период фильтрации заканчивается первым сексом. Потому что ты уже отфильтровала парня. Раз ты его отфильтровала, как же может продолжаться фильтрация? Правильно, никак. А начинается период первой коммуникацией, считай, что словом “Привет”. Видишь, никаких времен, только условия.
|
||||||
|
|
||||||
|
### <span style="color: #f54b7e;">Главный секрет влюбления</span>
|
||||||
|
|
||||||
|
  Для того, чтобы парень влюбился в тебя, необходимо и достаточно выполнения всего четырех условий. На самом деле, когда ты работаешь по влюблению в себя парня, ты действуешь согласно всего четырем правилам. Все эти четыре правила или условия являются необходимыми и достаточными. Необходимые, значит, требуется выполнение всех четырех условий, чтобы в тебя влюбились. Достаточные, значит, требуется выполнение только этих четырех условий и никаких больше.
|
||||||
|
Для влюбления парня **необходимы и достаточны 4 условия**:
|
||||||
|
|
||||||
|
- **Подстройка ментальная** — совпадение мышления.
|
||||||
|
- **Подстройка по ценностям** — общие принципы жизни.
|
||||||
|
- **Поведение** — действия, которые цепляют.
|
||||||
|
- **Достаточное качество девушки** — внешность, интеллект, харизма.
|
||||||
|
|
||||||
|
  Выбей этот секрет влюбления на огромном камне и используй этот камень вместо подушки. Только что я рассказал тебе главный секрет влюбления в себя мужчины. Или девушки, здесь нет никакой разницы, кстати. Есть всего четыре вещи: ментальная подстройка, подстройка по ценностям, твое качество и твое поведение. Всё, больше ничего нет. Больше ничего не требуется, чтобы влюбить в себя абсолютно любого парня. Самое сложное, над чем приходится работать обычной девушке — ее качество. Если же ты родилась с внешностью Адрианы Лимы или Миранды Керр, да еще и с головой на плечах. Тогда тебе крупно повезло, работать придется не так уж и много. Ты — девушка высокого качества. Четвертый пункт удовлетворен.
|
BIN
content/books/image2.png
Normal file
After Width: | Height: | Size: 38 KiB |
@ -1,10 +1,7 @@
|
|||||||
import { globalIgnores } from "eslint/config";
|
import { globalIgnores } from 'eslint/config'
|
||||||
import {
|
import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
|
||||||
defineConfigWithVueTs,
|
import pluginVue from 'eslint-plugin-vue'
|
||||||
vueTsConfigs,
|
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'
|
||||||
} from "@vue/eslint-config-typescript";
|
|
||||||
import pluginVue from "eslint-plugin-vue";
|
|
||||||
import skipFormatting from "@vue/eslint-config-prettier/skip-formatting";
|
|
||||||
|
|
||||||
// To allow more languages other than `ts` in `.vue` files, uncomment the following lines:
|
// To allow more languages other than `ts` in `.vue` files, uncomment the following lines:
|
||||||
// import { configureVueProject } from '@vue/eslint-config-typescript'
|
// import { configureVueProject } from '@vue/eslint-config-typescript'
|
||||||
@ -13,18 +10,19 @@ import skipFormatting from "@vue/eslint-config-prettier/skip-formatting";
|
|||||||
|
|
||||||
export default defineConfigWithVueTs(
|
export default defineConfigWithVueTs(
|
||||||
{
|
{
|
||||||
name: "app/files-to-lint",
|
name: 'app/files-to-lint',
|
||||||
files: ["**/*.{ts,mts,tsx,vue}"],
|
files: ['**/*.{ts,mts,tsx,vue}'],
|
||||||
},
|
},
|
||||||
|
|
||||||
globalIgnores([
|
globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**', './src/generated/**']),
|
||||||
"**/dist/**",
|
|
||||||
"**/dist-ssr/**",
|
|
||||||
"**/coverage/**",
|
|
||||||
"./src/generated/**",
|
|
||||||
]),
|
|
||||||
|
|
||||||
pluginVue.configs["flat/essential"],
|
pluginVue.configs['flat/essential'],
|
||||||
vueTsConfigs.recommended,
|
vueTsConfigs.recommended,
|
||||||
skipFormatting
|
skipFormatting,
|
||||||
);
|
{
|
||||||
|
rules: {
|
||||||
|
'vue/multi-word-component-names': 'off',
|
||||||
|
'vue/component-name-in-template-casing': ['error', 'PascalCase'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
21
index.html
@ -1,21 +0,0 @@
|
|||||||
<!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" />
|
|
||||||
<link href="/src/style.css" rel="stylesheet" />
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
||||||
<link
|
|
||||||
href="https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap"
|
|
||||||
rel="stylesheet"
|
|
||||||
/>
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Russo+One&display=swap" rel="stylesheet" />
|
|
||||||
<title>e-book</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="app"></div>
|
|
||||||
<script type="module" src="/src/main.ts"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
32
layouts/UiFooter/UiFooter.vue
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<template>
|
||||||
|
<footer class="mx-auto container max-2xl:pl-4">
|
||||||
|
<div class="relative z-50 max-w-[1280px] mx-auto">
|
||||||
|
<div class="flex justify-between mb-5">
|
||||||
|
<UiNav :nav-content="footerNavigation" />
|
||||||
|
</div>
|
||||||
|
<div class="pb-7 flex justify-between">
|
||||||
|
<div>
|
||||||
|
<UiParagraph as="span" size="250"
|
||||||
|
>По всем вопросам:<br />
|
||||||
|
<a href="mailto:vinogalante@yandex.ru" target="_blank">
|
||||||
|
vinogalante@yandex.ru
|
||||||
|
</a></UiParagraph
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex flex-col [&>[data-ui=ui-nav]]:text-secondary" v-if="route.path === '/'">
|
||||||
|
<UiNav :nav-content="refLitres" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import UiParagraph from '@/components/Typography/UiParagraph.vue'
|
||||||
|
import UiNav from '@/components/UiNav/UiNav.vue'
|
||||||
|
import { footerNavigation, refLitres } from '@/layouts/UiFooter/_data'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
|
||||||
|
const route = useRoute()
|
||||||
|
</script>
|
3
layouts/UiFooter/_data/index.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export { default as footerNavigation } from '@/layouts/UiFooter/_data/footer-navigation.data'
|
||||||
|
|
||||||
|
export { default as refLitres } from '@/layouts/UiFooter/_data/ref-litres.data'
|
14
layouts/UiFooter/_data/ref-litres.data.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
const refLitres = [
|
||||||
|
{
|
||||||
|
name: 'Реферальная ссылка на ЛитРес - Книга I',
|
||||||
|
path: 'https://www.litres.ru/58125553/',
|
||||||
|
target: '_blank',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Реферальная ссылка на ЛитРес - Книга II',
|
||||||
|
path: 'https://www.litres.ru/vino-galante/kak-vlubit-v-sebya-lubogo-tonkaya-igra/',
|
||||||
|
target: '_blank',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
export default refLitres
|
@ -1,12 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<header class="[&]:bg-accent text-white py-4 container mx-auto">
|
<header class="py-4 container mx-auto max-2xl:pl-4">
|
||||||
<div class="flex flex-row-reverse justify-end gap-4 items-center">
|
<div class="flex flex-row-reverse justify-end gap-4 items-center max-w-[1280px] mx-auto">
|
||||||
<slot name="content" />
|
<slot name="content" />
|
||||||
<div class="flex items-center gap-32">
|
<div class="flex items-center gap-32">
|
||||||
<div class="russo-one-regular">
|
<div class="russo-one-regular cursor-pointer !text-primary">
|
||||||
<UiParagraph tag="span" class="[&]:text-5xl">Vino Galante</UiParagraph>
|
<UiParagraph as="span" class="[&]:text-5xl">
|
||||||
|
<RouterLink to="/"> Vino Galante </RouterLink>
|
||||||
|
</UiParagraph>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex space-x-10">
|
<div class="flex flex-wrap space-x-10">
|
||||||
<UiNav :nav-content="headerNavigation" />
|
<UiNav :nav-content="headerNavigation" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -17,6 +19,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import UiNav from '@/components/UiNav/UiNav.vue'
|
import UiNav from '@/components/UiNav/UiNav.vue'
|
||||||
|
import { RouterLink } from 'vue-router'
|
||||||
import { headerNavigation } from './_data'
|
import { headerNavigation } from './_data'
|
||||||
import UiParagraph from '@/components/Typography/UiParagraph.vue'
|
import UiParagraph from '@/components/Typography/UiParagraph.vue'
|
||||||
</script>
|
</script>
|
1
layouts/UiHeader/_data/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export { default as headerNavigation } from '@/layouts/UiHeader/_data/header-navigation.data'
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<main class="pt-16 mt-10 px-6 min-h-screen h-full">
|
<main class="mt-10 px-6 min-h-screen h-full">
|
||||||
<div class="max-w-5xl mx-auto">
|
<div class="max-w-[1280px] mx-auto">
|
||||||
<Suspense>
|
<Suspense>
|
||||||
<slot />
|
<slot />
|
||||||
</Suspense>
|
</Suspense>
|
39
layouts/default.vue
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="min-h-svh overflow-x-hidden lato-regular relative overflow-visible before:content-[''] before:absolute before:bottom-0 before:h-full before:w-full before:bg-[url(/assets/img/png/footer-flowers-2.png)] before:bg-no-repeat before:bg-bottom before:bg-contain before:z-40"
|
||||||
|
:class="
|
||||||
|
route.path === '/books/1' || route.path === '/books/2'
|
||||||
|
? 'bg-[linear-gradient(135deg,rgba(17,17,30,1)_10%,rgba(183,32,76,1)_170%)]'
|
||||||
|
: 'bg-black-50'
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-if="route.path === '/'"
|
||||||
|
class="relative z-10 after:content-[''] after:absolute after:top-0 after:right-0 after:w-[820px] after:h-[535px] after:bg-[url(/assets/img/webp/gradient.webp)] after:bg-no-repeat after:bg-[right_top] after:bg-contain"
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
v-if="route.path === '/'"
|
||||||
|
class="relative z-20 after:content-[''] after:absolute after:top-0 after:right-0 after:w-[1120px] after:h-[1800px] after:bg-[url(/assets/img/webp/group-flowers.webp)] after:bg-no-repeat after:bg-[right_top] after:bg-cover"
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
v-if="route.path === '/'"
|
||||||
|
class="relative z-40 before:content-[''] before:absolute before:top-0 before:left-0 before:w-[1120px] before:h-[1000px] before:bg-[url(/assets/img/webp/hero-flowers.webp)] before:bg-no-repeat before:bg-left before:bg-contain"
|
||||||
|
/>
|
||||||
|
<UiHeader class="relative z-50" />
|
||||||
|
<UiMain class="!min-h-[1200px] text-primary relative">
|
||||||
|
<Suspense>
|
||||||
|
<slot />
|
||||||
|
</Suspense>
|
||||||
|
</UiMain>
|
||||||
|
<UiFooter />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import UiFooter from './UiFooter/UiFooter.vue'
|
||||||
|
import UiHeader from './UiHeader/UiHeader.vue'
|
||||||
|
import UiMain from './UiMain/UiMain.vue'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
|
||||||
|
const route = useRoute()
|
||||||
|
</script>
|
42
nuxt.config.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import config from './config'
|
||||||
|
|
||||||
|
import { fileURLToPath, URL } from 'node:url'
|
||||||
|
import head from './config/head'
|
||||||
|
// import sitemap from "./config/sitemap";
|
||||||
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||||
|
export default defineNuxtConfig({
|
||||||
|
compatibilityDate: '2025-05-15',
|
||||||
|
devtools: { enabled: true },
|
||||||
|
|
||||||
|
devServer: {
|
||||||
|
host: 'localhost',
|
||||||
|
port: 4002,
|
||||||
|
},
|
||||||
|
|
||||||
|
nitro: {
|
||||||
|
output: {
|
||||||
|
dir: './dist',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
alias: {
|
||||||
|
'@': fileURLToPath(new URL('./', import.meta.url)),
|
||||||
|
},
|
||||||
|
|
||||||
|
css: ['@/assets/css/tailwind.css'],
|
||||||
|
...config,
|
||||||
|
htmlValidator: {
|
||||||
|
usePrettier: true,
|
||||||
|
logLevel: 'error',
|
||||||
|
failOnError: false,
|
||||||
|
},
|
||||||
|
app: {
|
||||||
|
head: {
|
||||||
|
title: 'Vino Galante',
|
||||||
|
htmlAttrs: {
|
||||||
|
lang: 'ru',
|
||||||
|
},
|
||||||
|
...head,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
5779
package-lock.json
generated
57
package.json
@ -1,41 +1,48 @@
|
|||||||
{
|
{
|
||||||
"name": "e-book",
|
"name": "e-book",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.0",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"build": "nuxt build",
|
||||||
"build": "vue-tsc -b && vite build",
|
"dev": "nuxt dev",
|
||||||
"preview": "vite preview",
|
"generate": "nuxt generate",
|
||||||
|
"preview": "nuxt preview",
|
||||||
|
"postinstall": "nuxt prepare",
|
||||||
"prepare": "husky",
|
"prepare": "husky",
|
||||||
"lint": "node_modules/.bin/eslint . --fix",
|
"lint": "node_modules/.bin/eslint . --fix",
|
||||||
"format": "node_modules/.bin/prettier --write ./src/"
|
"format": "node_modules/.bin/prettier --write ./"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tailwindcss/vite": "^4.1.8",
|
"@nuxt/content": "^3.6.0",
|
||||||
"pinia": "^3.0.3",
|
"@nuxt/fonts": "^0.11.4",
|
||||||
"tailwindcss": "^4.1.8",
|
"@nuxt/icon": "^1.13.0",
|
||||||
"vue": "^3.5.13",
|
"@nuxt/image": "^1.10.0",
|
||||||
"vue-router": "4"
|
"@nuxtjs/html-validator": "^2.1.0",
|
||||||
|
"@nuxtjs/robots": "^5.2.10",
|
||||||
|
"@nuxtjs/sitemap": "^7.4.0",
|
||||||
|
"@pinia/nuxt": "^0.5.5",
|
||||||
|
"@tailwindcss/postcss": "^4.1.10",
|
||||||
|
"better-sqlite3": "^11.10.0",
|
||||||
|
"husky": "^9.1.7",
|
||||||
|
"nuxt": "^3.17.5",
|
||||||
|
"nuxt-schema-org": "^5.0.5",
|
||||||
|
"swiper": "^11.2.8",
|
||||||
|
"vue": "^3.5.16"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tsconfig/node22": "^22.0.1",
|
"@nuxt/eslint": "^1.4.1",
|
||||||
"@types/node": "^22.14.0",
|
"@nuxt/test-utils": "^3.11.3",
|
||||||
"@vitejs/plugin-vue": "^5.2.3",
|
"@nuxtjs/tailwindcss": "^6.11.4",
|
||||||
|
"@types/node": "^22.0.0",
|
||||||
"@vue/eslint-config-prettier": "^10.2.0",
|
"@vue/eslint-config-prettier": "^10.2.0",
|
||||||
"@vue/eslint-config-typescript": "^14.5.0",
|
"@vue/eslint-config-typescript": "^14.5.0",
|
||||||
"@vue/tsconfig": "^0.7.0",
|
"autoprefixer": "^10.4.18",
|
||||||
"eslint": "^9.22.0",
|
"eslint": "^9.29.0",
|
||||||
"eslint-plugin-vue": "~10.0.0",
|
"eslint-plugin-vue": "^10.0.0",
|
||||||
"husky": "^9.1.7",
|
"postcss": "^8.5.6",
|
||||||
"prettier": "3.5.3",
|
"prettier": "3.5.3",
|
||||||
|
"tailwindcss": "^3.4.17",
|
||||||
"typescript": "~5.8.3",
|
"typescript": "~5.8.3",
|
||||||
"vite": "^6.3.5",
|
"vue-tsc": "^2.2.8"
|
||||||
"vite-plugin-vue-devtools": "^7.7.2",
|
}
|
||||||
"vue-tsc": "^2.2.8",
|
|
||||||
"jiti": "^2.4.2",
|
|
||||||
"npm-run-all2": "^7.0.2",
|
|
||||||
"playwright": "^1.52.0"
|
|
||||||
},
|
|
||||||
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
|
||||||
}
|
}
|
||||||
|
228
pages/books/[slug].vue
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
<template>
|
||||||
|
<template v-if="book">
|
||||||
|
<div class="relative z-50 min-h-screen text-white mb-[208px]">
|
||||||
|
<template v-if="!route.params.chapter && !route.params.titlesSlug">
|
||||||
|
<!--верхний блок-->
|
||||||
|
<section
|
||||||
|
class="flex min-h-[600px] flex-row relative z-40 before:content-[''] before:absolute before:top-[-140px] before:bg-top before:left-0 before:w-[1280px] before:h-[1000px] before:bg-[url(/assets/img/webp/vino-galante.webp)] before:bg-no-repeat before:bg-contain mt-40"
|
||||||
|
>
|
||||||
|
<!--левый блок контента-->
|
||||||
|
<section class="relative top-[-30px] min-w-[570px]">
|
||||||
|
<div class="flex flex-col items-center h-[600px]">
|
||||||
|
<img :src="book.img" :alt="book.buttonText" />
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!--правый блок контента-->
|
||||||
|
<section>
|
||||||
|
<div class="w-11/12 h-full flex flex-col justify-start">
|
||||||
|
<div>
|
||||||
|
<UiHeading tag="H1" class="whitespace-pre-line [&]:font-bold" size="300">
|
||||||
|
{{ book.title }}
|
||||||
|
</UiHeading>
|
||||||
|
<UiParagraph class="mb-10" size="250">
|
||||||
|
{{ book.subtitle }}
|
||||||
|
</UiParagraph>
|
||||||
|
<UiParagraph size="250" class="mb-20">
|
||||||
|
{{ book.subdesc }}
|
||||||
|
</UiParagraph>
|
||||||
|
<UiParagraph size="250" class="whitespace-pre-line min-h-62">
|
||||||
|
{{ book.description }}
|
||||||
|
</UiParagraph>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<!--средний блок-->
|
||||||
|
<section class="flex flex-row items-center ml-12 gap-24">
|
||||||
|
<!--левый-->
|
||||||
|
<div class="flex flex-col items-center min-h-[310px]">
|
||||||
|
<div class="flex flex-row">
|
||||||
|
<UiParagraph class="[&]:text-6xl">{{ book.price }} </UiParagraph>
|
||||||
|
<img src="/img/svg/books/ruble.svg" alt="ruble" />
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center flex-col gap-3">
|
||||||
|
<UiButton class="max-w-[440px] !font-normal !px-2 !py-4 mt-16">
|
||||||
|
{{ book.buttonText }}
|
||||||
|
</UiButton>
|
||||||
|
<UiParagraph size="200">
|
||||||
|
{{ book.buttonFormat }}
|
||||||
|
</UiParagraph>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--правый-->
|
||||||
|
<div class="min-h-[310px] pt-6">
|
||||||
|
<!--о книге-->
|
||||||
|
<div>
|
||||||
|
<ul class="flex flex-row mr-14 items-center justify-between lg:whitespace-nowrap">
|
||||||
|
<li class="flex flex-row mr-14 gap-3 items-center">
|
||||||
|
<img src="/img/svg/books/book-pages.svg" alt="страниц" width="24" height="24" />
|
||||||
|
<UiParagraph size="250" as="span">
|
||||||
|
{{ book.pages }}
|
||||||
|
</UiParagraph>
|
||||||
|
</li>
|
||||||
|
<li class="flex flex-row mr-14 gap-3 items-center shrink-0">
|
||||||
|
<img
|
||||||
|
src="/img/svg/books/book-illustrations.svg"
|
||||||
|
alt="иллюстраций"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
/>
|
||||||
|
<UiParagraph size="250" as="span">
|
||||||
|
{{ book.illust }}
|
||||||
|
</UiParagraph>
|
||||||
|
</li>
|
||||||
|
<li class="flex flex-row mr-14 gap-3 items-center">
|
||||||
|
<img src="/img/svg/books/book-formats.svg" alt="формат" width="24" height="24" />
|
||||||
|
<UiParagraph size="250" as="span">
|
||||||
|
{{ book.format }}
|
||||||
|
</UiParagraph>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--навигация по книге-->
|
||||||
|
<div class="mt-28 pt-2">
|
||||||
|
<ul class="flex flex-row mr-32 items-baseline justify-between lg:whitespace-nowrap">
|
||||||
|
<li class="flex flex-row h-24 w-[105px] items-center">
|
||||||
|
<NuxtLink
|
||||||
|
:to="`/books/${route.params.slug}/chapters/${route.params.slug}/`"
|
||||||
|
class="flex flex-col gap-8 items-center cursor-pointer"
|
||||||
|
>
|
||||||
|
<img src="/img/svg/books/read.svg" alt="Читай отрывок" width="62" height="53" />
|
||||||
|
|
||||||
|
<UiParagraph size="250" as="span"> Читай отрывок </UiParagraph>
|
||||||
|
</NuxtLink>
|
||||||
|
</li>
|
||||||
|
<li class="flex flex-row items-center h-24 w-[105px]">
|
||||||
|
<NuxtLink to="#" class="flex flex-col items-center gap-8 cursor-pointer">
|
||||||
|
<img
|
||||||
|
src="/img/svg/books/download.svg"
|
||||||
|
alt="Скачай отрывок"
|
||||||
|
width="62"
|
||||||
|
height="53"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<UiParagraph size="250" as="span"> Скачай отрывок </UiParagraph>
|
||||||
|
</NuxtLink>
|
||||||
|
</li>
|
||||||
|
<li class="flex flex-row items-center h-24 w-[105px]">
|
||||||
|
<NuxtLink
|
||||||
|
:to="`/books/${route.params.slug}/${book.hrefTitles}`"
|
||||||
|
class="flex flex-col items-center gap-8 cursor-pointer"
|
||||||
|
>
|
||||||
|
<img src="/img/svg/books/down2.svg" alt="Содержание" width="62" height="53" />
|
||||||
|
|
||||||
|
<UiParagraph size="250" as="span"> Содержание </UiParagraph>
|
||||||
|
</NuxtLink>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!--нижний блок-->
|
||||||
|
<section class="ml-20 mt-32">
|
||||||
|
<div>
|
||||||
|
<UiHeading tag="h2" size="300" class="text-three"> Что ты узнаешь </UiHeading>
|
||||||
|
<ul class="flex mt-20 flex-row items-center justify-between">
|
||||||
|
<li
|
||||||
|
class="flex flex-col-reverse justify-end w-32 gap-4 h-64 items-center transition-transform transform hover:scale-110"
|
||||||
|
v-for="({ svg, text }, index) in book.whoUKnows"
|
||||||
|
:key="index"
|
||||||
|
>
|
||||||
|
<UiParagraph class="text-center" size="250">
|
||||||
|
{{ text }}
|
||||||
|
</UiParagraph>
|
||||||
|
<img :src="`${svg}`" alt="Вопрос" width="45" height="45" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-center text-center mt-36">
|
||||||
|
<UiParagraph>
|
||||||
|
Или купи на ЛитРес - <br /><a class="text-three" :href="book.href" target="_blank"
|
||||||
|
>Реферальная ссылка для поддержки автора</a
|
||||||
|
>
|
||||||
|
</UiParagraph>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
<NuxtPage />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div v-else class="text-white text-center py-20">Книга не найдена.</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, computed, watch } from 'vue'
|
||||||
|
import { useRoute } from '#app'
|
||||||
|
import UiHeading from '@/components/Typography/UiHeading.vue'
|
||||||
|
import UiParagraph from '@/components/Typography/UiParagraph.vue'
|
||||||
|
import UiButton from '@/components/UiButton/UiButton.vue'
|
||||||
|
|
||||||
|
interface BookDetail {
|
||||||
|
id: number
|
||||||
|
title: string
|
||||||
|
metaTitle: string
|
||||||
|
subtitle: string
|
||||||
|
subdesc: string
|
||||||
|
description: string
|
||||||
|
img: string
|
||||||
|
price: string
|
||||||
|
buttonText: string
|
||||||
|
buttonFormat: string
|
||||||
|
pages: string
|
||||||
|
illust: string
|
||||||
|
format: string
|
||||||
|
whoUKnows: Array<{
|
||||||
|
text: string
|
||||||
|
svg: string
|
||||||
|
}>
|
||||||
|
href: string
|
||||||
|
hrefTitles: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const route = useRoute()
|
||||||
|
|
||||||
|
const currentBookData = ref<BookDetail | null>(null)
|
||||||
|
|
||||||
|
const book = computed(() => currentBookData.value)
|
||||||
|
|
||||||
|
const loadBookData = async (slug: string) => {
|
||||||
|
try {
|
||||||
|
const module = await import(`./_data/${slug}.json`)
|
||||||
|
currentBookData.value = module.default as BookDetail
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Ошибка при загрузке книги с slug '${slug}':`, error)
|
||||||
|
currentBookData.value = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => route.params.slug,
|
||||||
|
async (newSlug) => {
|
||||||
|
if (newSlug) {
|
||||||
|
await loadBookData(newSlug as string)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ immediate: true },
|
||||||
|
)
|
||||||
|
|
||||||
|
watch(book, (newBook) => {
|
||||||
|
if (newBook) {
|
||||||
|
useHead({
|
||||||
|
title: `${newBook.metaTitle} | Vino Galante`,
|
||||||
|
meta: [
|
||||||
|
{
|
||||||
|
name: 'description',
|
||||||
|
content: 'Онлайн магазин книг автора Vino Galante',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
link: [
|
||||||
|
{
|
||||||
|
rel: 'canonical',
|
||||||
|
href: `https://ebook.miduway.space/books/${route.params.slug}`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
175
pages/books/[slug]/chapters/[chapter].vue
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
<template>
|
||||||
|
<div v-if="content" class="relative z-50 min-h-screen text-white mb-[208px] ml-4">
|
||||||
|
<section class="flex flex-col relative z-40 mt-40 ml-18 mr-18">
|
||||||
|
<div v-html="renderedContent" class="prose prose-invert max-w-none"></div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<div v-else class="text-white text-center py-20">Глава не найдена.</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
// Получаем параметры из URL
|
||||||
|
const route = useRoute()
|
||||||
|
const bookSlug = route.params.slug as string
|
||||||
|
const chapterSlug = route.params.chapter as string
|
||||||
|
|
||||||
|
// Загружаем контент из markdown файла
|
||||||
|
const { data: content } = await useAsyncData(`book-${bookSlug}-${chapterSlug}`, () => {
|
||||||
|
return $fetch(`/api/content/books/${chapterSlug}`)
|
||||||
|
})
|
||||||
|
|
||||||
|
// Конвертируем markdown в HTML (простая реализация)
|
||||||
|
const renderedContent = computed(() => {
|
||||||
|
if (!content.value?.content) return ''
|
||||||
|
|
||||||
|
let html = content.value.content
|
||||||
|
|
||||||
|
// Заменяем заголовки
|
||||||
|
html = html.replace(
|
||||||
|
/^### (.*$)/gim,
|
||||||
|
'<h3 style="color: #f54b7e; font-weight: bold; margin-top: 1.5rem; margin-bottom: 0.5rem;">$1</h3>',
|
||||||
|
)
|
||||||
|
html = html.replace(
|
||||||
|
/^## (.*$)/gim,
|
||||||
|
'<h2 style="color: #f54b7e; font-weight: bold; margin-top: 2rem; margin-bottom: 1rem;">$1</h2>',
|
||||||
|
)
|
||||||
|
html = html.replace(
|
||||||
|
/^# (.*$)/gim,
|
||||||
|
'<h1 style="color: #f54b7e; font-weight: bold; font-size: 1.5em; margin-bottom: 1rem;">$1</h1>',
|
||||||
|
)
|
||||||
|
|
||||||
|
// Заменяем параграфы
|
||||||
|
html = html.replace(
|
||||||
|
/^  (.*$)/gim,
|
||||||
|
'<p style="margin-bottom: 1rem; line-height: 1.6;">$1</p>',
|
||||||
|
)
|
||||||
|
|
||||||
|
// Заменяем жирный текст (двойные звездочки)
|
||||||
|
html = html.replace(/\*\*(.*?)\*\*/g, '<strong style=" font-weight: bold;">$1</strong>')
|
||||||
|
|
||||||
|
// Заменяем курсив (звездочки)
|
||||||
|
html = html.replace(/\*(.*?)\*/g, '<em style="font-style: italic;">$1</em>')
|
||||||
|
|
||||||
|
// Заменяем курсив (подчеркивания)
|
||||||
|
html = html.replace(/\_(.*?)\_/g, '<em style="font-style: italic;">$1</em>')
|
||||||
|
|
||||||
|
// Заменяем изображения - исправляем пути
|
||||||
|
html = html.replace(
|
||||||
|
/!\[([^\]]*)\]\(([^)]+)\)/g,
|
||||||
|
'<img src="/img/books/$2" alt="$1" style="max-width: 100%; height: auto; margin: 1rem 0; display: block;" />',
|
||||||
|
)
|
||||||
|
|
||||||
|
// Заменяем списки
|
||||||
|
html = html.replace(/^- (.*$)/gim, '<li style="margin-bottom: 0.5rem;">$1</li>')
|
||||||
|
html = html.replace(/(<li.*<\/li>)/s, '<ul style="margin-bottom: 1rem;">$1</ul>')
|
||||||
|
|
||||||
|
// Заменяем <br/> теги на HTML <br>
|
||||||
|
html = html.replace(/<br\/>/g, '<br>')
|
||||||
|
|
||||||
|
// Заменяем переносы строк
|
||||||
|
html = html.replace(/\n/g, '<br>')
|
||||||
|
|
||||||
|
return html
|
||||||
|
})
|
||||||
|
|
||||||
|
// Устанавливаем мета-теги
|
||||||
|
useHead({
|
||||||
|
title: `Глава ${chapterSlug} | Книга ${bookSlug} | Vino Galante`,
|
||||||
|
meta: [
|
||||||
|
{
|
||||||
|
name: 'description',
|
||||||
|
content: `Читайте главу ${chapterSlug} из книги ${bookSlug} автора Vino Galante`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
link: [
|
||||||
|
{
|
||||||
|
rel: 'canonical',
|
||||||
|
href: `https://ebook.miduway.space/books/${bookSlug}/chapters/${chapterSlug}`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
// Обработка ошибок, если файл не найден
|
||||||
|
if (!content.value) {
|
||||||
|
throw createError({
|
||||||
|
statusCode: 404,
|
||||||
|
statusMessage: 'Глава не найдена',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/* Дополнительные стили для контента */
|
||||||
|
.prose {
|
||||||
|
color: white;
|
||||||
|
max-width: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose h1 {
|
||||||
|
color: #f54b7e;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.5em;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose h2 {
|
||||||
|
color: #f54b7e;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 2rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose h3 {
|
||||||
|
color: #f54b7e;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose p {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose ul {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose li {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose em {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose blockquote {
|
||||||
|
border-left: 4px solid #f54b7e;
|
||||||
|
padding-left: 1rem;
|
||||||
|
margin: 1rem 0;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose img {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
margin: 1rem 0;
|
||||||
|
display: block;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Стили для подписей к изображениям */
|
||||||
|
.prose img + br + em {
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
font-style: italic;
|
||||||
|
color: #f54b7e;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
</style>
|
143
pages/books/[titlesSlug]/[titlesSlug].vue
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
<template>
|
||||||
|
<div v-if="titles" class="relative z-50 min-h-screen text-white mb-[208px]">
|
||||||
|
<section class="flex flex-col relative z-40 mt-40 ml-18">
|
||||||
|
<UiHeading tag="H1" class="whitespace-pre-line [&]:font-normal mb-10 -ml-5" size="500">
|
||||||
|
{{ titles.title }}
|
||||||
|
</UiHeading>
|
||||||
|
|
||||||
|
<div class="flex flex-col gap-6">
|
||||||
|
<div v-for="(section, index) in titles.sections" :key="index" class="flex flex-col gap-4">
|
||||||
|
<!-- Main section title -->
|
||||||
|
<UiHeading tag="h2" size="300" class="text-three [&]:font-normal">
|
||||||
|
{{ section.title }}
|
||||||
|
</UiHeading>
|
||||||
|
|
||||||
|
<!-- Subsections -->
|
||||||
|
<div v-if="section.subsections" class="ml-6 flex flex-col gap-4">
|
||||||
|
<div
|
||||||
|
v-for="(subsection, subIndex) in section.subsections"
|
||||||
|
:key="subIndex"
|
||||||
|
class="flex flex-col gap-2"
|
||||||
|
>
|
||||||
|
<!-- Subsection with image -->
|
||||||
|
<div
|
||||||
|
v-if="typeof subsection.title === 'object'"
|
||||||
|
class="flex items-center gap-3 -ml-10"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
v-if="subsection.title.img"
|
||||||
|
:src="subsection.title.img"
|
||||||
|
:alt="subsection.title.text"
|
||||||
|
class="w-6 h-6"
|
||||||
|
/>
|
||||||
|
<UiHeading tag="H3" size="300" class="[&]:font-normal">
|
||||||
|
{{ subsection.title.text }}
|
||||||
|
</UiHeading>
|
||||||
|
</div>
|
||||||
|
<!-- Regular subsection -->
|
||||||
|
<UiHeading v-else tag="H3" size="300" class="[&]:text-gray-200 [&]:font-normal">
|
||||||
|
{{ subsection.title }}
|
||||||
|
</UiHeading>
|
||||||
|
|
||||||
|
<!-- Items list -->
|
||||||
|
<ul v-if="subsection.items" class="ml-6 flex flex-col gap-2 list-decimal">
|
||||||
|
<li v-for="(item, itemIndex) in subsection.items" :key="itemIndex">
|
||||||
|
<UiParagraph size="300" class="[&]:text-gray-200 [&]:font-normal"
|
||||||
|
> {{ item }}</UiParagraph
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!-- Nested subsections -->
|
||||||
|
<div v-if="subsection.subsections" class="flex flex-col gap-2">
|
||||||
|
<div v-for="(nestedSub, nestedIndex) in subsection.subsections" :key="nestedIndex">
|
||||||
|
<UiHeading tag="H4" size="300" class="[&]:text-gray-200 [&]:font-normal">
|
||||||
|
{{ nestedSub.title }}
|
||||||
|
</UiHeading>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<div v-else class="text-white text-center py-20">Содержание не найдено.</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, computed, watch } from 'vue'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
import UiHeading from '@/components/Typography/UiHeading.vue'
|
||||||
|
import UiParagraph from '@/components/Typography/UiParagraph.vue'
|
||||||
|
|
||||||
|
interface SubsectionTitle {
|
||||||
|
text: string
|
||||||
|
img?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Subsection {
|
||||||
|
title: string | SubsectionTitle
|
||||||
|
items?: string[]
|
||||||
|
subsections?: Array<{
|
||||||
|
title: string
|
||||||
|
}>
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Section {
|
||||||
|
title: string
|
||||||
|
subsections?: Subsection[]
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TitlesData {
|
||||||
|
title: string
|
||||||
|
titleMeta: string
|
||||||
|
sections: Section[]
|
||||||
|
}
|
||||||
|
|
||||||
|
const route = useRoute()
|
||||||
|
|
||||||
|
const currentTitlesData = ref<TitlesData | null>(null)
|
||||||
|
|
||||||
|
const titles = computed(() => currentTitlesData.value)
|
||||||
|
|
||||||
|
const loadTitlesData = async (slug: string) => {
|
||||||
|
try {
|
||||||
|
const module = await import(`./_data/${slug}.json`)
|
||||||
|
currentTitlesData.value = module.default as TitlesData
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Ошибка при загрузке содержания с slug '${slug}':`, error)
|
||||||
|
currentTitlesData.value = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => route.params.titlesSlug,
|
||||||
|
async (newSlug) => {
|
||||||
|
if (newSlug) {
|
||||||
|
await loadTitlesData(newSlug as string)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ immediate: true },
|
||||||
|
)
|
||||||
|
|
||||||
|
watch(titles, (newTitles) => {
|
||||||
|
if (newTitles) {
|
||||||
|
useHead({
|
||||||
|
title: `${newTitles.titleMeta} | Vino Galante`,
|
||||||
|
meta: [
|
||||||
|
{
|
||||||
|
name: 'description',
|
||||||
|
content: 'Содержание книги Vino Galante',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
link: [
|
||||||
|
{
|
||||||
|
rel: 'canonical',
|
||||||
|
href: `https://ebook.miduway.space/books/${route.params.slug}/${route.params.titlesSlug}`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
187
pages/books/[titlesSlug]/_data/title-1.json
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
{
|
||||||
|
"id": "title-1",
|
||||||
|
"title": "Оглавление",
|
||||||
|
"titleMeta": "Оглавление - Книга I",
|
||||||
|
"sections": [
|
||||||
|
{
|
||||||
|
"title": "Благодарности"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Введение",
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Работа с любым печатным материалом"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Глава 1. Перезагрузка",
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Введение"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Убеждения соблазнительницы",
|
||||||
|
"img": "/img/svg/books/1/titles-1/flowbite_wine-glass-solid.svg"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
"Всё всегда хорошо",
|
||||||
|
"Другие девушки не помеха для меня",
|
||||||
|
"Парней много, я одна",
|
||||||
|
"Использовать мужчин – это естественно и приятно",
|
||||||
|
"Отшивать мужчин – это естественно",
|
||||||
|
"Ты имеешь ровно то, что заслужила",
|
||||||
|
"Ты достойна гораздо больше того, что имеешь на данный момент",
|
||||||
|
"Все, о чем ты способна мечтать, ты способна иметь",
|
||||||
|
"Проявлять активность успешной девушке естественно",
|
||||||
|
"Все мужчины, с которыми ты общаешься до замужества – всего лишь твои тренажеры",
|
||||||
|
"Мужчина должен относиться к тебе уважительно",
|
||||||
|
"Среди мужчин встречается идиоты",
|
||||||
|
"Тебе выгодно, если мужчина хочет тебя",
|
||||||
|
"Мужчина общается с тобой только тогда, когда ему от тебя что-то нужно",
|
||||||
|
"Пока мужчина тебя не трахнул, ты не проиграла",
|
||||||
|
"Если ты получаешь удовольствие от общения с мужчиной – все идет по плану",
|
||||||
|
"Ты ничего не должна мужчине, даже если он подарил тебе дворец и яхту",
|
||||||
|
"Соблазнение – всего лишь очень интересная игра, в которой нет проигравших",
|
||||||
|
"У мужчин две ахиллесовых пяты – это и секс. Это в сто раз важнее секса",
|
||||||
|
"Мужчины – очень хорошие создания",
|
||||||
|
"Мужчины не примитивные",
|
||||||
|
"Мужчинам нужен далеко не только секс (Мужчине нужен от тебя только секс, если ты больше ничего ему дать не можешь)",
|
||||||
|
"Смысл жизни – развитие",
|
||||||
|
"Иметь запасной аэродром правильно и естественно для женщины",
|
||||||
|
"Сексом мужчину не удержать",
|
||||||
|
"Общение с мужчиной должно приносить радость",
|
||||||
|
"Мужчины стремятся не к хорошим, а к высокоранговым женщинам",
|
||||||
|
"Мир вокруг тебя – отражение тебя самой"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Секс на первом свидании",
|
||||||
|
"img": "/img/svg/books/1/titles-1/healthicons_sexual-reproductive-health.svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Глава 2. Свобода",
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Введение"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Поля-тараканы",
|
||||||
|
"img": "/img/svg/books/1/titles-1/simple-icons_cockroachlabs.svg"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Техника безопасности при работе в полях"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Восстановление сил"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Главный принцип развития"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Техники выхода в аптайм"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Действия"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Результат"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Калибровка",
|
||||||
|
"img": "/img/svg/books/1/titles-1/material-symbols_editor-choice-rounded.svg"
|
||||||
|
},
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Азбука калибровки"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Как наблюдать, не вызывая подозрений"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Стратегия сближений",
|
||||||
|
"img": "/img/svg/books/1/titles-1/ph_strategy-fill.svg"
|
||||||
|
},
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Определение и классификация"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Псевдопассивная. Этап первый"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Псевдопассивная. Этап второй"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Активный тип стратегии"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Третий этап. Степени кокетства"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Глава 3. Затравка",
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Введение"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Теория женской привлекательности",
|
||||||
|
"img": "/img/svg/books/1/titles-1/icon-park-outline_women.svg"
|
||||||
|
},
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Введение"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Физическое здоровье"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Ментальный посыл. Стильность"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Ментальный посыл. Внутреннее ощущение мира"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Ошибки резидента",
|
||||||
|
"img": "/img/svg/books/1/titles-1/si_error-line.svg"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
"Косак 1",
|
||||||
|
"Косак 2",
|
||||||
|
"Полукосак 3",
|
||||||
|
"Косак 4",
|
||||||
|
"МетаКосак 5 – опасный",
|
||||||
|
"МетаКосак 6 – опасный",
|
||||||
|
"Косак 7",
|
||||||
|
"МетаКосак 8 – крайне опасно",
|
||||||
|
"МетаКосак 9 – опасно",
|
||||||
|
"Косак 10",
|
||||||
|
"Косак 11"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "В следующей книге"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
170
pages/books/[titlesSlug]/_data/title-2.json
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
{
|
||||||
|
"id": "title-1",
|
||||||
|
"title": "Оглавление",
|
||||||
|
"titleMeta": "Оглавление - Книга II",
|
||||||
|
"sections": [
|
||||||
|
{
|
||||||
|
"title": "Введение"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Глава 1. Перед боем",
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Закон Вино Галанте или закон неотвратимости успеха",
|
||||||
|
"img": "/img/svg/books/2/titles-2/octicon_law-24.svg"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Запасной аэродром",
|
||||||
|
"img": "/img/svg/books/2/titles-2/mingcute_airplane-line.svg"
|
||||||
|
},
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Экскурс в историю"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Правила формирования запасного аэродрома"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Подробнее о пятом пункте или как не врать"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Следствия наличия запасного аэродрома"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Свидания",
|
||||||
|
"img": "/img/svg/books/2/titles-2/mdi_heart-outline (1).svg"
|
||||||
|
},
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Одежда"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Правильные места для свиданий"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Самое важное в свиданиях"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Глава 2. Ближний бой",
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Введение"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Техника влюбления",
|
||||||
|
"img": "/img/svg/books/2/titles-2/Vector (4).svg"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
"Механизм мужской и женской влюбленностей",
|
||||||
|
"Главный секрет влюбления",
|
||||||
|
"Ментальная подстройка",
|
||||||
|
"Подстройка по ценностям",
|
||||||
|
"Качество девушки",
|
||||||
|
"Поведение",
|
||||||
|
"Как правильно хвалить мужчину",
|
||||||
|
"Игра “Ближе-дальше”",
|
||||||
|
"Дикий крышечок “Полярный разрыв”",
|
||||||
|
"Полярный разрыв в действии или крышечок на грани фола",
|
||||||
|
"Фишка “Рассмеяться как зло”",
|
||||||
|
"Фишка “АХ”",
|
||||||
|
"Техника влюбления “Отмененная помощь”",
|
||||||
|
"Техника влюбления “Не тот поворот”",
|
||||||
|
"Техника влюбления “Неожиданный разрыв”",
|
||||||
|
"Техника влюбления “Обещанный звонок”",
|
||||||
|
"Техника влюбления “Парень – подружка”",
|
||||||
|
"Фишка “Бросок кобры”",
|
||||||
|
"Фишка “Мягкий язык”",
|
||||||
|
"Вызов ревности"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Типичные неэффективные фишки девушек",
|
||||||
|
"img": "/img/svg/books/2/titles-2/Group.svg"
|
||||||
|
},
|
||||||
|
"items": ["Я выхожу замуж", "Я скучаю по парню", "Желание казаться круче, чем ты есть"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Чего никогда нельзя делать",
|
||||||
|
"img": "/img/svg/books/2/titles-2/Group (1).svg"
|
||||||
|
},
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Введение"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Оральные ласки"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Минет"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "СМС-переписка",
|
||||||
|
"img": "/img/svg/books/2/titles-2/Vector (6).svg"
|
||||||
|
},
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Российские школы соблазнения"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Как найти соблазнителя"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "История рождения одного термина"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Секс и девичья невинность",
|
||||||
|
"img": "/img/svg/books/2/titles-2/Vector (7).svg"
|
||||||
|
},
|
||||||
|
"subsections": [
|
||||||
|
{
|
||||||
|
"title": "Как парни воспринимают секс"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Девичья невинность"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Прожим девственницы. Метод Галанте."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Прожим девственницы. Классический метод."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Прожим девственницы. Метод пикапера."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Вместо эпилога"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Что делать, если попался «сложный красавчик»"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": {
|
||||||
|
"text": "Словарь",
|
||||||
|
"img": "/img/svg/books/2/titles-2/Vector (8).svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
39
pages/books/_data/1.json
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"title": "Как влюбить в себя любого\nКнига I",
|
||||||
|
"metaTitle": "Как влюбить в себя любого - Книга I",
|
||||||
|
"subtitle": "ОТКРОВЕНИЯ БЫВШЕГО КАЗАНОВЫ",
|
||||||
|
"subdesc": "💡 Ты красивая, умная, но он не пишет? Эта книга покажет, как влюбить в себя любого — без игр и унижений",
|
||||||
|
"description": "Думаешь Vino Galante - правнук легендарного Джакомо Казановы? Да, такие слухи ходят. Но здесь дело не в итальянской крови. Просто Galante - очень «тонкий» соблазнитель. Зная все тонкости этого искусства, он филигранно работает «кончиками пальцев».\n\nА эту книгу (ты не поверишь!!) он написал специально для девушек. Однажды влюбившись, Vino перестал соблазнять. Так у тебя появилась возможность узнать основы тонкого искусства соблазнения из легендарного первоисточника.",
|
||||||
|
"img": "/img/webp/books/1.webp",
|
||||||
|
"price": "520 ",
|
||||||
|
"buttonText": "Хочу знать, как работает мужская психология",
|
||||||
|
"buttonFormat": "PDF + EPUB сразу после оплаты",
|
||||||
|
"pages": "210 страниц",
|
||||||
|
"illust": "11 иллюстраций",
|
||||||
|
"format": "PDF + EPUB",
|
||||||
|
"whoUKnows": [
|
||||||
|
{
|
||||||
|
"text": "Как устроено мужское влечение на самом деле",
|
||||||
|
"svg": "/img/svg/books/1/mdi_heart-outline.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Почему красивые девушки часто одиноки — и что с этим делать",
|
||||||
|
"svg": "/img/svg/books/1/f7_exclamationmark.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Как флиртовать тонко, не теряя себя",
|
||||||
|
"svg": "/img/svg/books/1/meteor-icons_message.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Что делает девушку запоминающейся",
|
||||||
|
"svg": "/img/svg/books/1/lucide_star.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Как не попадать в «запас» и быть единственной",
|
||||||
|
"svg": "/img/svg/books/1/stash_target.svg"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"href": "https://www.litres.ru/58125553/",
|
||||||
|
"hrefTitles": "title-1"
|
||||||
|
}
|
39
pages/books/_data/2.json
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"title": "Как влюбить в себя любого\nКнига II",
|
||||||
|
"metaTitle": "Как влюбить в себя любого - Книга II",
|
||||||
|
"subtitle": "ТОНКАЯ ИГРА",
|
||||||
|
"subdesc": "💡 Если ты устала от “не готов к отношениям” — начни играть по своим правилам",
|
||||||
|
"description": "Ты бывала свидетелем такого, что у красивой девушки личная жизнь не складывается, а у, казалось бы, дурнушки и семья хорошая, и муж и любит, и обеспечивает? Да такое сплошь и рядом!\n\nХочешь узнать, как построить отношения с любым парнем в наш век, когда вокруг полно красавиц, а все мужчины/парни избалованы?\nОтветы ты найдешь в этой книге.",
|
||||||
|
"img": "/img/webp/books/2.webp",
|
||||||
|
"price": "520 ",
|
||||||
|
"buttonText": "Скачать сейчас — и начать менять игру",
|
||||||
|
"buttonFormat": "PDF + EPUB сразу после оплаты",
|
||||||
|
"pages": "210 страниц",
|
||||||
|
"illust": "11 иллюстраций",
|
||||||
|
"format": "PDF + EPUB",
|
||||||
|
"whoUKnows": [
|
||||||
|
{
|
||||||
|
"text": "Как выстроить притяжение с любым мужчиной",
|
||||||
|
"svg": "/img/svg/books/1/mdi_heart-outline.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Как включить его чувства, а не просто понравиться",
|
||||||
|
"svg": "/img/svg/books/1/f7_exclamationmark.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Какие фишки работают — и почему",
|
||||||
|
"svg": "/img/svg/books/1/meteor-icons_message.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Почему мужчины уходят от «идеальных» и возвращаются к «опасным»",
|
||||||
|
"svg": "/img/svg/books/1/lucide_star.svg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Как говорить и вести себя, чтобы остаться в его сердце",
|
||||||
|
"svg": "/img/svg/books/1/stash_target.svg"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"href": "https://www.litres.ru/vino-galante/kak-vlubit-v-sebya-lubogo-tonkaya-igra/",
|
||||||
|
"hrefTitles": "title-2"
|
||||||
|
}
|
17
pages/cart/_data/cart.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"title": "Корзина",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "Как влюбить в себя любого \n Книга I. \n Откровения бывшего Казановы",
|
||||||
|
"src": "/assets/img/png/book1.png",
|
||||||
|
"buy": "добавить Книгу I"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Как влюбить в себя любого \n Книга II. \n Тонкая игра",
|
||||||
|
"src": "/assets/img/png/book2.png",
|
||||||
|
"buy": "добавить Книгу II"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"message": "💡 Купи обе книги и получи скидку 10% - 936 за комплект",
|
||||||
|
"price": "520 ₽"
|
||||||
|
}
|
8
pages/cart/index.vue
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<template>
|
||||||
|
<section class="relative z-50">
|
||||||
|
<UiHeading tag="h1" size="300"> Корзина </UiHeading>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import UiHeading from '~/components/Typography/UiHeading.vue'
|
||||||
|
</script>
|
16
pages/index/_ui/feedbackSection/_data/feedback.data.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
const feedbackData = [
|
||||||
|
{
|
||||||
|
text: 'Классная книга! Понятная и увлекательная. По моему мнению, проблема только в том, что женщине самой (без поддержки), выполнить всё, что написано в книге чрезвычайно сложно.\nИдеи супер: \n – первый секс – козырный туз женщины и не надо отдавать его в начале :)\n – жизнь взяток не берет! Надо действовать.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Интересная книга, читаешь «не отрывая глаз», те рекомендации, которые я применяла – действительно рабочие!! Всем советую! По моему мнению видно, что автор действительно очень хорошо знает и понимаем женскую психологию.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Книга содержит знания, которыми жалко делиться ;) нигде ничего подобного не встречала. Очень много авторских формул и примеров, автор - опытный соблазнитель :) кое-что уже успешно применяла на практике',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Книга для всех девушек, кто только начинают строить отношения. Это вакцина от девичьих ошибок, дает понимание, чего они хотят. Учит не наступать на их уловки. Благодаря ей я стала более уверена в себе.',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
export default feedbackData
|
131
pages/index/_ui/feedbackSection/feedbackSection.vue
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<template>
|
||||||
|
<section class="feedback-section">
|
||||||
|
<UiHeading tag="h2" size="300" class="text-three mb-4 pl-16 pr-24">
|
||||||
|
Что говорят читатели
|
||||||
|
</UiHeading>
|
||||||
|
|
||||||
|
<!-- Slider main container -->
|
||||||
|
|
||||||
|
<div class="swiper feedback-swiper relative">
|
||||||
|
<!-- If we need pagination -->
|
||||||
|
|
||||||
|
<!-- Additional required wrapper -->
|
||||||
|
<div class="swiper-wrapper">
|
||||||
|
<!-- Slides -->
|
||||||
|
<div
|
||||||
|
v-for="(feedback, index) in feedbackData"
|
||||||
|
:key="index"
|
||||||
|
class="swiper-slide feedback-slide !w-[356px] !h-[325px]"
|
||||||
|
>
|
||||||
|
<div class="feedback-card !w-full !h-full">
|
||||||
|
<UiParagraph size="250" class="card-text">{{
|
||||||
|
feedback.text
|
||||||
|
}}</UiParagraph>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center flex-col">
|
||||||
|
<UiParagraph size="250" class="text-center mt-20">
|
||||||
|
Твое мнение важно!<br />
|
||||||
|
Если книга была полезной или вызвала эмоции, оставь отзыв.<br />
|
||||||
|
Это поможет другим и вдохновит на новые главы. <br />
|
||||||
|
Спасибо!
|
||||||
|
</UiParagraph>
|
||||||
|
<UiButton class="mt-10" variants="secondary">Написать отзыв</UiButton>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { onMounted } from "vue";
|
||||||
|
import Swiper from "swiper";
|
||||||
|
import { Pagination, Autoplay } from "swiper/modules";
|
||||||
|
import UiHeading from "@/components/Typography/UiHeading.vue";
|
||||||
|
import UiParagraph from "@/components/Typography/UiParagraph.vue";
|
||||||
|
import feedbackData from "./_data/feedback.data";
|
||||||
|
|
||||||
|
import "swiper/css";
|
||||||
|
import "swiper/css/pagination";
|
||||||
|
import UiButton from "@/components/UiButton/UiButton.vue";
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
new Swiper(".feedback-swiper", {
|
||||||
|
modules: [Pagination, Autoplay],
|
||||||
|
direction: "horizontal",
|
||||||
|
loop: true,
|
||||||
|
autoplay: {
|
||||||
|
delay: 3000,
|
||||||
|
disableOnInteraction: false,
|
||||||
|
},
|
||||||
|
slidesPerView: "auto",
|
||||||
|
spaceBetween: 72,
|
||||||
|
pagination: {
|
||||||
|
el: ".swiper-pagination",
|
||||||
|
clickable: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="css" scoped>
|
||||||
|
.feedback-section {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feedback-swiper {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
padding-bottom: 40px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feedback-slide {
|
||||||
|
width: 300px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feedback-card {
|
||||||
|
background-color: #1a1a1a;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 20px;
|
||||||
|
color: #fff;
|
||||||
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-text {
|
||||||
|
white-space: pre-line;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.swiper-pagination {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: auto;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.swiper-pagination-bullet {
|
||||||
|
background-color: #fff;
|
||||||
|
opacity: 0.4;
|
||||||
|
margin: 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.swiper-pagination-bullet-active {
|
||||||
|
background-color: #fff;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
</style>
|
54
pages/index/_ui/forYouSection/forYouSection.vue
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<template>
|
||||||
|
<section>
|
||||||
|
<UiHeading tag="h1" size="300" class="text-three">
|
||||||
|
Книги для тебя, если ты не знаешь...
|
||||||
|
</UiHeading>
|
||||||
|
<ul class="flex mt-20 flex-row items-center justify-between">
|
||||||
|
<li
|
||||||
|
class="flex flex-col-reverse justify-end w-38 gap-4 h-64 items-center transition-transform transform hover:scale-110"
|
||||||
|
v-for="({ img, text }, index) in questions.data"
|
||||||
|
:key="index"
|
||||||
|
>
|
||||||
|
<UiParagraph class="text-center" size="250">
|
||||||
|
{{ text }}
|
||||||
|
</UiParagraph>
|
||||||
|
<img :src="`${img}`" alt="Вопрос" width="101" height="101" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import UiHeading from "@/components/Typography/UiHeading.vue";
|
||||||
|
import UiParagraph from "@/components/Typography/UiParagraph.vue";
|
||||||
|
import { reactive } from "vue";
|
||||||
|
|
||||||
|
const questions = reactive({
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
img: "/img/svg/ellipse1.svg",
|
||||||
|
text: 'Что делать, если у тебя ноги не "от ушей" и ты далеко не Мисс Мира?',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
img: "/img/svg/ellipse2.svg",
|
||||||
|
text: "Как начать легко общаться с противоположным полом и о чем надо помолчать?",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
img: "/img/svg/ellipse3.svg",
|
||||||
|
text: "Как относиться к сексу и на сколько важна девичья невинность?",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
img: "/img/svg/ellipse4.svg",
|
||||||
|
text: "Сколько нужно заниматься, чтобы обрести НОВУЮ себя?",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
img: "/img/svg/ellipse5.svg",
|
||||||
|
text: "Как выработать стратегию долгосрочных отношений?",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
img: "/img/svg/ellipse6.svg",
|
||||||
|
text: "Как добиться того, чтоб парень делал так, как ты хочешь, но думал, что он сам так решил?",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
</script>
|
35
pages/index/_ui/heroBanner/_ui/buyContent.vue
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import UiParagraph from '@/components/Typography/UiParagraph.vue';
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
v-for="({ topContent, button, botContent }, index) in content.data"
|
||||||
|
:key="index"
|
||||||
|
class="flex flex-col items-center max-w-96"
|
||||||
|
>
|
||||||
|
<UiParagraph size="300" class="mb-12 h-32">{{ topContent }} </UiParagraph>
|
||||||
|
<UiButton variants="primary" class="mb-3 w-full">{{ button }} </UiButton>
|
||||||
|
<UiParagraph as="span" size="200"> {{ botContent }}</UiParagraph>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import UiParagraph from '@/components/Typography/UiParagraph.vue'
|
||||||
|
import UiButton from '@/components/UiButton/UiButton.vue'
|
||||||
|
import { reactive } from 'vue'
|
||||||
|
|
||||||
|
const content = reactive({
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
topContent:
|
||||||
|
'💡 Узнай, как думает мужчина, что его действительно цепляет, и что делает женщину незабываемой.',
|
||||||
|
button: 'КУПИТЬ КНИГУ I',
|
||||||
|
botContent: 'PDF + EPUB сразу после оплаты',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
topContent:
|
||||||
|
'💡 Продолжение для тех, кто готов перейти от флирта к глубокому контакту. Как строить притяжение, не теряя себя.',
|
||||||
|
button: 'КУПИТЬ КНИГУ II',
|
||||||
|
botContent: 'PDF + EPUB сразу после оплаты',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
</script>
|
13
pages/index/_ui/heroBanner/heroBanner.vue
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<template>
|
||||||
|
<section>
|
||||||
|
<div class="relative z-50">
|
||||||
|
<img src="/assets/img/webp/hero-banner-content.webp" alt="Книги" />
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-row justify-between pl-16 pr-24">
|
||||||
|
<BuyContent />
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import BuyContent from "./_ui/buyContent.vue";
|
||||||
|
</script>
|
37
pages/index/_ui/youNotAloneSection/youNotAloneSection.vue
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<template>
|
||||||
|
<section class="flex flex-row">
|
||||||
|
<div
|
||||||
|
class="lg:w-5/12 pl-5 pr-5 shadow-md bg-[url('/assets/img/png/shadow.png')]"
|
||||||
|
>
|
||||||
|
<UiHeading tag="h2" size="300" class="text-three mb-4 mt-5">
|
||||||
|
💔 Ты не одна.
|
||||||
|
<br />Я знаю, через что ты<br />
|
||||||
|
проходишь.
|
||||||
|
</UiHeading>
|
||||||
|
<UiParagraph size="250" class="xl:max-w-[392px] mb-5"
|
||||||
|
>Когда ты снова и снова отдаёшь сердце, а в ответ — тишина или игра, это
|
||||||
|
ранит. Я знаю это чувство. Я был по ту сторону: манипулировал,
|
||||||
|
очаровывал, уходил.
|
||||||
|
|
||||||
|
<br /><br />Я — бывший Казанова. И однажды я понял: больше так нельзя.
|
||||||
|
|
||||||
|
<br /><br />Эти книги — не теория. Это ключ к пониманию, как устроена
|
||||||
|
мужская психология, чего на самом деле хочет мужчина, и как перестать
|
||||||
|
теряться в отношениях.
|
||||||
|
|
||||||
|
<br /><br />Я написал их для тебя — чтобы ты могла быть счастливой, не
|
||||||
|
прогибаясь, не умоляя, не теряя себя. Если ты устала «играть», если
|
||||||
|
хочешь любви по-настоящему — начни с первой страницы. В этих книгах нет
|
||||||
|
воды. Только правда.</UiParagraph
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div class="lg:w-7/12">
|
||||||
|
<NuxtImg src="/img/webp/meetingAlone.webp" alt="meeting" loading="lazy" />
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import UiHeading from "@/components/Typography/UiHeading.vue";
|
||||||
|
import UiParagraph from "@/components/Typography/UiParagraph.vue";
|
||||||
|
</script>
|
31
pages/index/index.vue
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<section class="relative z-50">
|
||||||
|
<HeroBanner
|
||||||
|
class="pt-28 bg-[url('/assets/img/png/bg.png')] z-40 bg-no-repeat bg-[400px] rounded-[50px] relative after:absolute after:bg-[url('/assets/img/webp/header-flowers-4.webp')] after:top-0 after:w-[418px] after:right-0 after:h-[230px] after:z-20 after:content-[''] after:bg-contain after:bg-no-repeat after:bg-right"
|
||||||
|
/>
|
||||||
|
<ForYouSection class="mt-40 pl-16 pr-24" />
|
||||||
|
<YouNotAloneSection class="mt-40 pl-16 pr-24 mb-40" />
|
||||||
|
<FeedbackSection class="mt-40 mb-52" />
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import FeedbackSection from "./_ui/feedbackSection/feedbackSection.vue";
|
||||||
|
import ForYouSection from "./_ui/forYouSection/forYouSection.vue";
|
||||||
|
import HeroBanner from "./_ui/heroBanner/heroBanner.vue";
|
||||||
|
import YouNotAloneSection from "./_ui/youNotAloneSection/youNotAloneSection.vue";
|
||||||
|
|
||||||
|
useHead({
|
||||||
|
title: "Vino Galante",
|
||||||
|
meta: [
|
||||||
|
{ name: "description", content: "Онлайн магазин книг автора Vino Galante" },
|
||||||
|
],
|
||||||
|
link: [
|
||||||
|
{
|
||||||
|
rel: "canonical",
|
||||||
|
href: `https://ebook.miduway.space/`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
</script>
|
104
pages/privacy/index.vue
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<template>
|
||||||
|
<section class="relative z-50">
|
||||||
|
<UiHeading size="300" tag="H1" class="mb-5">
|
||||||
|
Политика конфиденциальности
|
||||||
|
</UiHeading>
|
||||||
|
<UiParagraph size="300" class="mb-5"
|
||||||
|
>Настоящая политика конфиденциальности описывает, как мы собираем,
|
||||||
|
используем и защищаем личную информацию, которую пользователи
|
||||||
|
предоставляют при использовании нашего сайта.</UiParagraph
|
||||||
|
>
|
||||||
|
|
||||||
|
<UiHeading size="300" tag="h2">1. Сбор информации</UiHeading>
|
||||||
|
<UiParagraph size="300"
|
||||||
|
>При оформлении заказа на сайте вы предоставляете персональные данные,
|
||||||
|
которые включают:</UiParagraph
|
||||||
|
>
|
||||||
|
<ul class="list-disc pl-5 mb-3">
|
||||||
|
<li><UiParagraph size="300">Адрес электронной почты</UiParagraph></li>
|
||||||
|
<li><UiParagraph size="300">Имя (по желанию)</UiParagraph></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<UiHeading size="300" tag="h2">2. Использование информации</UiHeading>
|
||||||
|
<UiParagraph size="300" class="mb-3"
|
||||||
|
>Ваши личные данные используются исключительно для:</UiParagraph
|
||||||
|
>
|
||||||
|
<ul class="list-disc pl-5">
|
||||||
|
<li>
|
||||||
|
<UiParagraph size="300"
|
||||||
|
>Обработки и выполнения вашего заказа.</UiParagraph
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<UiParagraph> Связи с вами по вопросам вашего заказа. </UiParagraph>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<UiParagraph size="300" class="mb-3">
|
||||||
|
Уведомления о важных обновлениях и новостях сайта (только если вы явно
|
||||||
|
согласились на рассылку).</UiParagraph
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<UiHeading size="300" tag="h2">3. Защита личных данных</UiHeading>
|
||||||
|
<UiParagraph size="300" class="mb-3">
|
||||||
|
Мы предпринимаем необходимые меры для защиты ваших личных данных от
|
||||||
|
несанкционированного доступа, изменения, разглашения или уничтожения.
|
||||||
|
Доступ к личным данным имеют только сотрудники, непосредственно
|
||||||
|
участвующие в обработке заказов.
|
||||||
|
</UiParagraph>
|
||||||
|
|
||||||
|
<UiHeading size="300" tag="h2"
|
||||||
|
>4. Передача информации третьим лицам</UiHeading
|
||||||
|
>
|
||||||
|
<UiParagraph size="300" class="mb-3">
|
||||||
|
Мы не передаём ваши личные данные третьим лицам, за исключением случаев,
|
||||||
|
предусмотренных законодательством Российской Федерации.
|
||||||
|
</UiParagraph>
|
||||||
|
|
||||||
|
<UiHeading size="300" tag="h2">5. Cookies (Куки-файлы)</UiHeading>
|
||||||
|
<UiParagraph size="300" class="mb-3">
|
||||||
|
Мы используем файлы cookie, чтобы улучшить ваш пользовательский опыт. Вы
|
||||||
|
можете отключить файлы cookie в настройках вашего браузера, однако это
|
||||||
|
может ограничить доступ к некоторым функциям сайта.
|
||||||
|
</UiParagraph>
|
||||||
|
|
||||||
|
<UiHeading size="300" tag="h2"
|
||||||
|
>6. Изменения в политике конфиденциальности</UiHeading
|
||||||
|
>
|
||||||
|
<UiParagraph size="300" class="mb-3">
|
||||||
|
Мы можем периодически обновлять настоящую политику конфиденциальности. Об
|
||||||
|
изменениях мы уведомим вас, разместив новую версию политики на данной
|
||||||
|
странице.
|
||||||
|
</UiParagraph>
|
||||||
|
|
||||||
|
<UiHeading size="300" tag="h2">7. Ваше согласие</UiHeading>
|
||||||
|
<UiParagraph size="300"
|
||||||
|
>Используя наш сайт, вы соглашаетесь с условиями данной политики
|
||||||
|
конфиденциальности.</UiParagraph
|
||||||
|
>
|
||||||
|
<UiParagraph size="300">
|
||||||
|
Если у вас возникнут вопросы или пожелания относительно обработки ваших
|
||||||
|
персональных данных, пожалуйста, свяжитесь с нами по электронной почте:
|
||||||
|
<a href="mailto:vinogalante@yandex.ru">vinogalante@yandex.ru</a>.
|
||||||
|
</UiParagraph>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import UiHeading from "@/components/Typography/UiHeading.vue";
|
||||||
|
import UiParagraph from "@/components/Typography/UiParagraph.vue";
|
||||||
|
|
||||||
|
useHead({
|
||||||
|
title: "Поликита конфиденциальности | Vino Galante",
|
||||||
|
meta: [
|
||||||
|
{ name: "description", content: "Онлайн магазин книг автора Vino Galante" },
|
||||||
|
],
|
||||||
|
link: [
|
||||||
|
{
|
||||||
|
rel: "canonical",
|
||||||
|
href: `https://ebook.miduway.space/privacy`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
</script>
|
46
pages/question/_data/question-answer.json
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"question": "1. Как купить книгу?",
|
||||||
|
"answer": "Чтобы купить книгу, просто перейдите на страницу соответствующей книги и нажмите кнопку «Купить». Вы будете перенаправлены в корзину, где можно подтвердить заказ и выбрать способ оплаты."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "2. Какие способы оплаты доступны?",
|
||||||
|
"answer": "На сайте доступны самые удобные и безопасные способы оплаты: банковские карты (Visa, Mastercard, Мир), Система Быстрых Платежей (СБП) и сервис SberPay. Вы можете выбрать любой из них при оформлении заказа."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "3. Можно ли скачать книгу сразу после покупки?",
|
||||||
|
"answer": "Да, после подтверждения покупки, ссылка на скачивание книги будет доступна сразу. Вы получите файл на указанный при заказе email, либо сможете скачать книгу непосредственно с сайта."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "4. Что делать, если я не могу скачать книгу?",
|
||||||
|
"answer": "Если у вас возникли проблемы с скачиванием книги, пожалуйста, свяжитесь с нами через контактный email vinogalante@yandex.ru, и мы постараемся решить ваш вопрос как можно скорее."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "5. Есть ли пробный отрывок книги?",
|
||||||
|
"answer": "Да, на каждой странице книги есть возможность ознакомиться с аннотацией и скачать отрывок или читать его прямо на сайте. Это поможет вам оценить стиль и содержание книги перед покупкой."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "6. Как читать книгу на мобильном устройстве?",
|
||||||
|
"answer": "Книги можно читать на мобильных устройствах в любом формате (например, PDF). Просто скачайте файл и откройте его с помощью подходящего приложения, например, Adobe Reader для PDF."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "7. Можно ли вернуть книгу, если она не понравилась?",
|
||||||
|
"answer": "К сожалению, электронные книги не подлежат возврату, поскольку они могут быть скачаны сразу после покупки. Мы рекомендуем ознакомиться с отрывком книги перед покупкой, чтобы убедиться, что она соответствует вашим ожиданиям."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "8. Как связаться с автором?",
|
||||||
|
"answer": "Вы можете связаться со мной по электронной почте vinogalante@yandex.ru. Я всегда рад услышать отзывы о книгах и ответить на вопросы."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "9. Как узнать, когда выйдет следующая книга?",
|
||||||
|
"answer": "На данный момент автор не планирует продолжать писать книги по данной теме. Сейчас автор сосредоточен на других проектах."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "10. Есть ли скидки на книги?",
|
||||||
|
"answer": "Да, при оплате двух книг сразу предоставляется скидка 10%. Просто добавьте обе книги в корзину, и скидка будет автоматически применена при оформлении заказа."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "11. Могу ли я получить книгу в другом формате?",
|
||||||
|
"answer": "На данный момент книги доступны в формате PDF, ePub. Если вам нужен другой формат, пожалуйста, свяжитесь с нами, и мы постараемся помочь."
|
||||||
|
}
|
||||||
|
]
|
43
pages/question/index.vue
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<template>
|
||||||
|
<section class="relative z-50 ml-4">
|
||||||
|
<div v-for="({ question, answer }, index) in questions" :key="index" class="mb-16">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
@click="toggleFAQ(index)"
|
||||||
|
class="flex gap-12 mb-5 items-baseline font-bold"
|
||||||
|
>
|
||||||
|
<UiParagraph as="span" size="600">
|
||||||
|
{{ question }}
|
||||||
|
</UiParagraph>
|
||||||
|
<img
|
||||||
|
src="/assets/icon/arrow.svg"
|
||||||
|
alt="question"
|
||||||
|
class="duration-500"
|
||||||
|
:class="activeIndex === index ? 'rotate-90' : 'rotate-0'"
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
<Transition name="slide">
|
||||||
|
<div v-show="activeIndex === index">
|
||||||
|
<UiParagraph size="300">
|
||||||
|
{{ answer }}
|
||||||
|
</UiParagraph>
|
||||||
|
</div>
|
||||||
|
</Transition>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import UiParagraph from '~/components/Typography/UiParagraph.vue'
|
||||||
|
import questions from './_data/question-answer.json'
|
||||||
|
|
||||||
|
const activeIndex = ref<null | number>(null)
|
||||||
|
|
||||||
|
const toggleFAQ = (index: number) => {
|
||||||
|
activeIndex.value = activeIndex.value === index ? null : index
|
||||||
|
}
|
||||||
|
|
||||||
|
useHead({
|
||||||
|
title: 'Вопрос - ответ | Vino Galante',
|
||||||
|
})
|
||||||
|
</script>
|
5
postcss.config.mjs
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
plugins: {
|
||||||
|
"@tailwindcss/postcss": {},
|
||||||
|
}
|
||||||
|
}
|
BIN
public/favicon.ico
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
public/img/books/image2.png
Normal file
After Width: | Height: | Size: 38 KiB |
3
public/img/svg/books/1/f7_exclamationmark.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M25.0104 33.4059C26.1254 33.4059 26.9047 32.6698 26.9253 31.5332L27.1139 7.02002C27.1139 5.82058 26.1254 5 24.9888 5C23.8738 5 22.8853 5.82058 22.8853 7.02002L23.116 31.5332C23.1376 32.6698 23.9151 33.4059 25.0104 33.4059ZM24.9888 44.9999C25.3829 45.0025 25.7737 44.9272 26.1385 44.7782C26.5034 44.6293 26.8353 44.4096 27.1149 44.1319C27.3946 43.8543 27.6166 43.524 27.7682 43.1602C27.9198 42.7964 27.998 42.4062 27.9982 42.0121C27.9982 40.3503 26.6722 39.0243 24.9888 39.0243C24.5964 39.024 24.2077 39.1012 23.8451 39.2512C23.4825 39.4013 23.1531 39.6214 22.8756 39.8989C22.5981 40.1764 22.378 40.5058 22.2279 40.8684C22.0779 41.231 22.0007 41.6197 22.001 42.0121C22.0038 42.8037 22.3195 43.562 22.8792 44.1217C23.4389 44.6814 24.1973 44.9971 24.9888 44.9999Z" fill="#E51E7D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 891 B |
3
public/img/svg/books/1/lucide_star.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M24.1466 8.36767C24.2254 8.20832 24.3473 8.07418 24.4983 7.98039C24.6494 7.88661 24.8237 7.83691 25.0015 7.83691C25.1793 7.83691 25.3535 7.88661 25.5046 7.98039C25.6557 8.07418 25.7775 8.20832 25.8564 8.36767L30.014 16.789C30.2875 17.3436 30.6917 17.8234 31.1918 18.1871C31.6919 18.5508 32.2728 18.7875 32.8847 18.8768L42.1826 20.2375C42.3588 20.263 42.5243 20.3373 42.6604 20.452C42.7966 20.5667 42.8979 20.7172 42.9529 20.8865C43.008 21.0558 43.0146 21.2371 42.972 21.41C42.9293 21.5828 42.8392 21.7403 42.7117 21.8645L35.9876 28.4123C35.5438 28.8442 35.2117 29.3776 35.0201 29.9665C34.8285 30.5553 34.7831 31.182 34.8879 31.7924L36.4753 41.0435C36.5064 41.2195 36.4874 41.4008 36.4204 41.5666C36.3535 41.7324 36.2412 41.8761 36.0966 41.9812C35.9519 42.0862 35.7806 42.1485 35.6022 42.161C35.4238 42.1734 35.2455 42.1354 35.0877 42.0514L26.7761 37.6814C26.2285 37.3935 25.6192 37.2431 25.0006 37.2431C24.3819 37.2431 23.7726 37.3935 23.225 37.6814L14.9153 42.0514C14.7575 42.1349 14.5794 42.1725 14.4013 42.1598C14.2232 42.1471 14.0523 42.0848 13.9079 41.9798C13.7635 41.8747 13.6515 41.7313 13.5846 41.5658C13.5177 41.4003 13.4985 41.2193 13.5294 41.0435L15.115 31.7942C15.2201 31.1835 15.1749 30.5565 14.9833 29.9673C14.7917 29.3781 14.4595 28.8444 14.0153 28.4123L7.29121 21.8663C7.16269 21.7422 7.07162 21.5845 7.02837 21.4111C6.98512 21.2378 6.99143 21.0557 7.04658 20.8858C7.10173 20.7158 7.2035 20.5648 7.3403 20.4498C7.47711 20.3349 7.64344 20.2607 7.82036 20.2357L17.1164 18.8768C17.7289 18.788 18.3107 18.5516 18.8114 18.1879C19.3122 17.8241 19.7169 17.3441 19.9908 16.789L24.1466 8.36767Z" stroke="#E51E7D" stroke-width="3.90819" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
3
public/img/svg/books/1/mdi_heart-outline.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M25.18 36.4754L25 36.6554L24.802 36.4754C16.252 28.7174 10.6 23.5874 10.6 18.3854C10.6 14.7854 13.3 12.0854 16.9 12.0854C19.672 12.0854 22.372 13.8854 23.326 16.3334H26.674C27.628 13.8854 30.328 12.0854 33.1 12.0854C36.7 12.0854 39.4 14.7854 39.4 18.3854C39.4 23.5874 33.748 28.7174 25.18 36.4754ZM33.1 8.48535C29.968 8.48535 26.962 9.94335 25 12.2294C23.038 9.94335 20.032 8.48535 16.9 8.48535C11.356 8.48535 7 12.8234 7 18.3854C7 25.1714 13.12 30.7334 22.39 39.1394L25 41.5154L27.61 39.1394C36.88 30.7334 43 25.1714 43 18.3854C43 12.8234 38.644 8.48535 33.1 8.48535Z" fill="#E51E7D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 699 B |
3
public/img/svg/books/1/meteor-icons_message.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M39.625 29.875C39.625 30.737 39.2826 31.5636 38.6731 32.1731C38.0636 32.7826 37.237 33.125 36.375 33.125H16.875L10.375 39.625V13.625C10.375 12.763 10.7174 11.9364 11.3269 11.3269C11.9364 10.7174 12.763 10.375 13.625 10.375H36.375C37.237 10.375 38.0636 10.7174 38.6731 11.3269C39.2826 11.9364 39.625 12.763 39.625 13.625V29.875Z" stroke="#E51E7D" stroke-width="3.52857" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 530 B |
4
public/img/svg/books/1/stash_target.svg
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M25 9.89927C22.5261 9.89819 20.0898 10.5048 17.9052 11.6657C15.7207 12.8267 13.8547 14.5065 12.4713 16.5574C11.088 18.6084 10.2296 20.9678 9.97157 23.4282C9.71356 25.8886 10.0638 28.3747 10.9916 30.668C11.0759 30.8595 11.1208 31.0659 11.1238 31.275C11.1267 31.4842 11.0877 31.6918 11.0089 31.8856C10.9302 32.0793 10.8133 32.2553 10.6653 32.4031C10.5172 32.5509 10.341 32.6674 10.1471 32.7458C9.9532 32.8242 9.74552 32.8629 9.53638 32.8595C9.32724 32.8562 9.1209 32.8109 8.9296 32.7263C8.7383 32.6417 8.56593 32.5196 8.4227 32.3671C8.27948 32.2147 8.16832 32.0351 8.09581 31.8389C6.51986 27.9412 6.33956 23.6187 7.58547 19.6034C8.83138 15.588 11.4269 12.1268 14.9324 9.80587C18.4379 7.48496 22.6378 6.44706 26.8209 6.86799C31.004 7.28892 34.9129 9.14279 37.8857 12.1156C40.8585 15.0884 42.7124 18.9974 43.1333 23.1804C43.5543 27.3635 42.5164 31.5635 40.1955 35.0689C37.8746 38.5744 34.4133 41.17 30.398 42.4159C26.3827 43.6618 22.0601 43.4815 18.1625 41.9055C17.7867 41.7443 17.4891 41.4423 17.3335 41.0641C17.1779 40.686 17.1767 40.2619 17.3302 39.883C17.4837 39.504 17.7796 39.2003 18.1545 39.037C18.5294 38.8737 18.9534 38.8639 19.3354 39.0097C21.4006 39.8433 23.6246 40.2098 25.8481 40.0831C28.0716 39.9564 30.2396 39.3396 32.1968 38.2767C34.1539 37.2139 35.8518 35.7314 37.1689 33.9355C38.4859 32.1395 39.3895 30.0745 39.8148 27.8884C40.2402 25.7023 40.1769 23.4492 39.6294 21.2904C39.082 19.1317 38.0639 17.1207 36.648 15.4015C35.2322 13.6823 33.4538 12.2975 31.44 11.3463C29.4263 10.3951 27.2271 9.90092 25 9.89927Z" fill="#E51E7D"/>
|
||||||
|
<path d="M13.021 25.002C13.021 27.7458 13.9439 30.2749 15.496 32.2958L14.5189 33.2728L14.4585 33.3353H12.021C11.1925 33.3361 10.3982 33.6658 9.81269 34.252L6.40227 37.6624C6.18403 37.8809 6.03544 38.1592 5.97526 38.4621C5.91509 38.7651 5.94603 39.079 6.06417 39.3644C6.18232 39.6497 6.38238 39.8936 6.63908 40.0653C6.89578 40.237 7.19761 40.3288 7.50644 40.3291H9.67311V42.4958C9.67338 42.8046 9.76516 43.1064 9.93687 43.3631C10.1086 43.6198 10.3525 43.8199 10.6378 43.938C10.9232 44.0562 11.2371 44.0871 11.5401 44.0269C11.843 43.9668 12.1213 43.8182 12.3398 43.5999L15.7502 40.1874C16.3359 39.6024 16.6656 38.809 16.6669 37.9812V35.5437L16.7294 35.4833L17.7064 34.5083C19.8515 36.1547 22.4906 37.027 25.1943 36.9831C27.8981 36.9393 30.5075 35.982 32.5981 34.2669C34.6887 32.5518 36.1375 30.1798 36.7089 27.5368C37.2803 24.8937 36.9406 22.1351 35.7451 19.7096C34.5496 17.2841 32.5687 15.3344 30.1245 14.1777C27.6803 13.021 24.9166 12.7253 22.283 13.3386C19.6494 13.952 17.3007 15.4384 15.6191 17.556C13.9375 19.6736 13.0218 22.2979 13.021 25.002ZM25.0002 16.1478C26.3897 16.1482 27.7595 16.4756 28.999 17.1036C30.2385 17.7315 31.3128 18.6423 32.1351 19.7624C32.9573 20.8825 33.5045 22.1803 33.7322 23.551C33.9599 24.9217 33.8618 26.3267 33.4458 27.6525C33.0299 28.9783 32.3078 30.1875 31.3379 31.1825C30.368 32.1774 29.1776 32.9302 27.8628 33.3798C26.5481 33.8294 25.146 33.9633 23.77 33.7707C22.3939 33.578 21.0825 33.0642 19.9419 32.2708L23.371 28.8395C24.2612 29.2172 25.2551 29.2735 26.1823 28.9987C27.1095 28.7239 27.9122 28.1352 28.4529 27.3335C28.9936 26.5317 29.2386 25.5668 29.1459 24.6043C29.0531 23.6417 28.6285 22.7413 27.9447 22.0575C27.2609 21.3737 26.3605 20.9491 25.3979 20.8563C24.4354 20.7636 23.4705 21.0086 22.6687 21.5493C21.867 22.09 21.2782 22.8927 21.0035 23.8199C20.7287 24.7471 20.785 25.7409 21.1627 26.6312L17.7294 30.0583C16.8056 28.7303 16.2632 27.1746 16.1613 25.5602C16.0593 23.9457 16.4016 22.3342 17.1509 20.9005C17.9003 19.4669 19.0281 18.2659 20.4118 17.428C21.7956 16.5902 23.3825 16.1474 25.0002 16.1478ZM14.4585 35.4187L14.5835 35.5416V37.9791C14.5829 38.2551 14.4728 38.5196 14.2773 38.7145L11.7564 41.2353V39.2874C11.7564 39.0112 11.6467 38.7462 11.4513 38.5509C11.256 38.3555 10.991 38.2458 10.7148 38.2458H8.76477L11.2856 35.7249C11.3823 35.6279 11.4973 35.5509 11.6238 35.4983C11.7504 35.4458 11.8861 35.4187 12.0231 35.4187H14.4585Z" fill="#E51E7D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.0 KiB |
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.91667 2.33301C9.67311 2.33286 9.43561 2.40894 9.23747 2.55059C9.03934 2.69223 8.8905 2.89234 8.81183 3.12284L8.6625 3.55801C8.34809 4.44754 8.0517 5.34333 7.7735 6.24484C7.39433 7.49201 7 8.98184 7 9.99801C7 10.1162 7.00311 10.2345 7.00933 10.3527C6.98881 10.5151 7.00273 10.6801 7.05017 10.8368C7.413 13.9075 9.723 16.7985 12.8333 17.3888V23.333H10.5C10.1906 23.333 9.89383 23.4559 9.67504 23.6747C9.45625 23.8935 9.33333 24.1903 9.33333 24.4997C9.33333 24.8091 9.45625 25.1058 9.67504 25.3246C9.89383 25.5434 10.1906 25.6663 10.5 25.6663H17.5C17.8094 25.6663 18.1062 25.5434 18.325 25.3246C18.5437 25.1058 18.6667 24.8091 18.6667 24.4997C18.6667 24.1903 18.5437 23.8935 18.325 23.6747C18.1062 23.4559 17.8094 23.333 17.5 23.333H15.1667V17.39C18.5593 16.746 21 13.3638 21 9.99918C21 8.99234 20.6173 7.51767 20.2417 6.27167C19.9159 5.20896 19.5631 4.15472 19.1835 3.11001L19.1812 3.10651C19.1002 2.88018 18.9512 2.68441 18.7547 2.54596C18.5582 2.4075 18.3237 2.33313 18.0833 2.33301H9.91667ZM9.39983 9.33301H18.6013C18.4987 8.70068 18.2828 7.85601 18.0075 6.94484C17.7749 6.17998 17.5255 5.4203 17.2597 4.66634H10.7473C10.5315 5.29168 10.2573 6.09317 10.0053 6.92384C9.72533 7.84317 9.50483 8.69601 9.39983 9.33301Z" fill="#E20C66"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
@ -0,0 +1,7 @@
|
|||||||
|
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.7941 11.288C11.7471 10.8792 10.5945 10.8274 9.51504 11.1406C8.4356 11.4538 7.48973 12.1145 6.82421 13.0203C6.15869 13.926 5.81075 15.0261 5.83437 16.1498C5.858 17.2735 6.25187 18.358 6.95486 19.235C7.65786 20.112 8.63066 20.7324 9.72231 21C10.814 21.2675 11.9634 21.1673 12.9923 20.7148C14.0211 20.2623 14.8718 19.4829 15.4124 18.4975C15.953 17.5121 16.1532 16.3758 15.982 15.2649C15.9674 15.1703 15.9717 15.0737 15.9944 14.9807C16.0172 14.8876 16.0581 14.8 16.1147 14.7228C16.1714 14.6456 16.2427 14.5803 16.3245 14.5306C16.4064 14.4809 16.4973 14.4479 16.5919 14.4333C16.6866 14.4188 16.7832 14.423 16.8762 14.4458C16.9692 14.4685 17.0569 14.5094 17.1341 14.566C17.2113 14.6227 17.2766 14.694 17.3263 14.7759C17.3759 14.8577 17.409 14.9486 17.4236 15.0433C17.6435 16.4714 17.3859 17.9323 16.6907 19.1991C15.9955 20.4659 14.9016 21.4679 13.5788 22.0495C12.256 22.6311 10.7782 22.7598 9.37475 22.4157C7.9713 22.0716 6.72066 21.2739 5.8169 20.1464C4.91314 19.0188 4.4068 17.6245 4.37645 16.1798C4.3461 14.7351 4.79343 13.3208 5.64904 12.1563C6.50465 10.9918 7.72068 10.1423 9.10845 9.73954C10.4962 9.33679 11.9781 9.40335 13.3242 9.92888C13.4146 9.96279 13.4974 10.0143 13.5677 10.0805C13.6381 10.1467 13.6946 10.2261 13.7339 10.3143C13.7733 10.4025 13.7948 10.4976 13.7971 10.5941C13.7994 10.6907 13.7825 10.7867 13.7474 10.8767C13.7123 10.9666 13.6597 11.0487 13.5926 11.1182C13.5255 11.1877 13.4453 11.2431 13.3566 11.2813C13.2679 11.3195 13.1725 11.3397 13.0759 11.3407C12.9794 11.3418 12.8836 11.3243 12.7941 11.288Z" fill="#E20C66"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.208 28.4375V22.6042C10.208 22.4108 10.2848 22.2253 10.4216 22.0886C10.5583 21.9518 10.7438 21.875 10.9372 21.875C11.1306 21.875 11.316 21.9518 11.4528 22.0886C11.5895 22.2253 11.6663 22.4108 11.6663 22.6042V28.4375C11.6663 28.6309 11.5895 28.8164 11.4528 28.9531C11.316 29.0898 11.1306 29.1667 10.9372 29.1667C10.7438 29.1667 10.5583 29.0898 10.4216 28.9531C10.2848 28.8164 10.208 28.6309 10.208 28.4375Z" fill="#E20C66"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.02051 24.792C8.02051 24.5986 8.09733 24.4131 8.23408 24.2764C8.37082 24.1397 8.55629 24.0628 8.74967 24.0628H13.1247C13.3181 24.0628 13.5035 24.1397 13.6403 24.2764C13.777 24.4131 13.8538 24.5986 13.8538 24.792C13.8538 24.9854 13.777 25.1709 13.6403 25.3076C13.5035 25.4443 13.3181 25.5212 13.1247 25.5212H8.74967C8.55629 25.5212 8.37082 25.4443 8.23408 25.3076C8.09733 25.1709 8.02051 24.9854 8.02051 24.792ZM21.074 11.1296C20.266 10.9015 19.4141 10.8762 18.5939 11.0561C17.7738 11.236 17.0107 11.6154 16.3722 12.1607C15.7338 12.7061 15.2397 13.4005 14.9338 14.1825C14.628 14.9644 14.5197 15.8098 14.6187 16.6436C14.6306 16.7389 14.6234 16.8356 14.5978 16.9282C14.5721 17.0208 14.5284 17.1074 14.4691 17.183C14.4099 17.2587 14.3363 17.3218 14.2525 17.3689C14.1688 17.416 14.0766 17.4461 13.9812 17.4574C13.8858 17.4688 13.7891 17.4612 13.6966 17.435C13.6042 17.4088 13.5178 17.3647 13.4425 17.305C13.3672 17.2454 13.3044 17.1715 13.2577 17.0875C13.2111 17.0035 13.1815 16.9111 13.1706 16.8156C13.0003 15.3807 13.3083 13.9296 14.0469 12.6876C14.7856 11.4456 15.9135 10.4821 17.2557 9.94663C18.5979 9.41118 20.0793 9.33372 21.47 9.72626C22.8607 10.1188 24.083 10.9594 24.9471 12.1176C25.8113 13.2758 26.269 14.6868 26.2492 16.1318C26.2295 17.5767 25.7333 18.9747 24.8378 20.1088C23.9423 21.2429 22.6975 22.0498 21.2966 22.4041C19.8957 22.7585 18.4169 22.6405 17.0899 22.0686C17.0019 22.0307 16.9223 21.9759 16.8555 21.9072C16.7888 21.8386 16.7362 21.7575 16.7008 21.6685C16.6293 21.4888 16.632 21.2881 16.7085 21.1104C16.785 20.9328 16.9289 20.7928 17.1086 20.7213C17.2883 20.6498 17.489 20.6526 17.6667 20.7291C18.3082 21.0055 18.9996 21.1473 19.6981 21.1457C20.3967 21.144 21.0874 20.9991 21.7277 20.7197C22.3679 20.4403 22.944 20.0325 23.4202 19.5215C23.8965 19.0105 24.2628 18.4072 24.4965 17.7489C24.7301 17.0906 24.8262 16.3914 24.7787 15.6944C24.7312 14.9975 24.5412 14.3178 24.2203 13.6973C23.8995 13.0768 23.4547 12.5287 22.9135 12.0871C22.3724 11.6454 21.7463 11.3195 21.074 11.1296Z" fill="#E20C66"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.9117 12.5476C23.775 12.4109 23.6982 12.2254 23.6982 12.0321C23.6982 11.8387 23.775 11.6533 23.9117 11.5166L29.3805 6.0478C29.4477 5.97816 29.5282 5.92261 29.6172 5.88439C29.7061 5.84618 29.8018 5.82606 29.8986 5.82522C29.9954 5.82438 30.0915 5.84283 30.1811 5.87949C30.2707 5.91616 30.3521 5.9703 30.4206 6.03876C30.489 6.10723 30.5432 6.18864 30.5798 6.27825C30.6165 6.36786 30.6349 6.46388 30.6341 6.5607C30.6333 6.65752 30.6131 6.7532 30.5749 6.84216C30.5367 6.93112 30.4812 7.01158 30.4115 7.07884L24.9428 12.5476C24.806 12.6843 24.6206 12.7611 24.4273 12.7611C24.2339 12.7611 24.0485 12.6843 23.9117 12.5476Z" fill="#E20C66"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M29.8402 10.9379C29.7444 10.9366 29.6498 10.9165 29.5618 10.8787C29.4738 10.841 29.3941 10.7862 29.3273 10.7176C29.2605 10.649 29.2078 10.5679 29.1723 10.479C29.1368 10.39 29.1192 10.295 29.1205 10.1992L29.1569 7.30151L26.2592 7.33797C26.0658 7.34048 25.8794 7.26607 25.7408 7.1311C25.6023 6.99614 25.5231 6.81167 25.5206 6.61828C25.5181 6.42489 25.5925 6.23843 25.7274 6.09991C25.8624 5.96138 26.0469 5.88215 26.2403 5.87964L30.6342 5.82422L30.5788 10.2182C30.5776 10.3139 30.5575 10.4085 30.5197 10.4965C30.4819 10.5845 30.4271 10.6642 30.3585 10.731C30.29 10.7978 30.2089 10.8505 30.1199 10.886C30.031 10.9215 29.9359 10.9391 29.8402 10.9379Z" fill="#E20C66"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M11.2142 3.71542C9.35741 3.71542 6.51074 4.78701 7.50066 11.423C7.51621 11.5233 7.53469 11.6316 7.55608 11.7479C7.73691 12.746 8.01574 14.2913 6.24124 15.5653C7.44816 16.5558 9.16724 17.5457 11.2562 17.9744C11.1735 18.4482 11.0699 18.918 10.9458 19.3826C10.7761 20.0056 10.4202 20.4472 9.78441 20.6356C9.22441 20.8013 8.63758 20.9354 8.03674 21.0731C7.88196 21.1081 7.72641 21.1439 7.57008 21.1804C6.82049 21.3548 6.05633 21.5479 5.37908 21.8209C4.70008 22.0951 4.06891 22.4643 3.61274 23.015C3.14841 23.5768 2.89991 24.2849 2.91683 25.1704C2.92266 25.4458 3.15833 25.6663 3.44766 25.6663H24.5515C24.8408 25.6663 25.0765 25.4458 25.0823 25.1704C25.0992 24.2849 24.8513 23.5768 24.3864 23.015C23.9308 22.4643 23.2991 22.0945 22.6207 21.8209C21.9428 21.5473 21.1787 21.3543 20.4285 21.1798L19.963 21.0731C19.3616 20.9354 18.7747 20.8013 18.2147 20.6356C17.5789 20.4472 17.2231 20.0056 17.0533 19.3826C16.905 18.8294 16.787 18.2686 16.6998 17.7026C18.297 17.2219 19.9945 16.358 21.7579 14.9784L21.7497 14.9703C20.922 14.1781 19.3703 12.6929 19.2601 9.16726C19.2601 4.31276 16.1649 0.0462566 11.2142 3.71542Z" stroke="#E20C66" stroke-width="2" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M13.9995 24.4997L10.062 25.8122C9.92593 25.8511 9.79954 25.8802 9.68288 25.8997C9.56621 25.9191 9.44954 25.9288 9.33288 25.9288C8.71066 25.9288 8.16621 25.7099 7.69954 25.272C7.23288 24.8341 6.99954 24.2753 6.99954 23.5955V17.2372L3.96621 12.308C3.84954 12.1136 3.76204 11.9141 3.70371 11.7095C3.64538 11.505 3.61621 11.2961 3.61621 11.083C3.61621 10.8699 3.64538 10.6611 3.70371 10.4565C3.76204 10.252 3.84954 10.0525 3.96621 9.85801L7.93288 3.44134C8.14677 3.09134 8.42871 2.81912 8.77871 2.62467C9.12871 2.43023 9.50788 2.33301 9.91621 2.33301H18.0829C18.4912 2.33301 18.8704 2.43023 19.2204 2.62467C19.5704 2.81912 19.8523 3.09134 20.0662 3.44134L24.0329 9.85801C24.1495 10.0525 24.237 10.252 24.2954 10.4565C24.3537 10.6611 24.3829 10.8699 24.3829 11.083C24.3829 11.2961 24.3537 11.5053 24.2954 11.7107C24.237 11.916 24.1495 12.1151 24.0329 12.308L20.9995 17.2372V23.5955C20.9995 24.2761 20.7662 24.8353 20.2995 25.2732C19.8329 25.7111 19.2884 25.9296 18.6662 25.9288C18.5495 25.9288 18.4329 25.9191 18.3162 25.8997C18.1995 25.8802 18.0732 25.8511 17.937 25.8122L13.9995 24.4997ZM9.91621 17.4997H18.0829L22.0495 11.083L18.0829 4.66634H9.91621L5.94954 11.083L9.91621 17.4997ZM12.7745 12.5413L16.887 8.39967C17.1009 8.16634 17.3685 8.05434 17.6897 8.06367C18.0109 8.07301 18.2878 8.18501 18.5204 8.39967C18.7537 8.63301 18.8754 8.91029 18.8855 9.23151C18.8957 9.55273 18.7837 9.82962 18.5495 10.0622L13.5912 15.0205C13.3579 15.2538 13.0857 15.3705 12.7745 15.3705C12.4634 15.3705 12.1912 15.2538 11.9579 15.0205L9.47871 12.5413C9.24538 12.308 9.12871 12.0311 9.12871 11.7107C9.12871 11.3902 9.24538 11.113 9.47871 10.8788C9.71204 10.6447 9.98932 10.5281 10.3105 10.5288C10.6318 10.5296 10.9087 10.6463 11.1412 10.8788L12.7745 12.5413Z" fill="#E20C66"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
3
public/img/svg/books/1/titles-1/ph_strategy-fill.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M11.813 20.5625C11.813 21.2547 11.6077 21.9314 11.2231 22.507C10.8385 23.0826 10.2919 23.5312 9.65238 23.7961C9.01284 24.061 8.3091 24.1303 7.63017 23.9952C6.95124 23.8602 6.3276 23.5269 5.83811 23.0374C5.34863 22.5479 5.01529 21.9242 4.88024 21.2453C4.74519 20.5664 4.8145 19.8626 5.07941 19.2231C5.34431 18.5836 5.79292 18.0369 6.36849 17.6524C6.94406 17.2678 7.62075 17.0625 8.31299 17.0625C9.24124 17.0625 10.1315 17.4312 10.7879 18.0876C11.4442 18.744 11.813 19.6342 11.813 20.5625ZM5.86955 12.8691L7.43799 11.2995L9.00642 12.8691C9.17061 13.0332 9.39329 13.1255 9.62549 13.1255C9.85768 13.1255 10.0804 13.0332 10.2445 12.8691C10.4087 12.7049 10.501 12.4822 10.501 12.25C10.501 12.0178 10.4087 11.7951 10.2445 11.6309L8.67502 10.0625L10.2445 8.49406C10.4087 8.32988 10.501 8.10719 10.501 7.875C10.501 7.64281 10.4087 7.42012 10.2445 7.25594C10.0804 7.09175 9.85768 6.99951 9.62549 6.99951C9.39329 6.99951 9.17061 7.09175 9.00642 7.25594L7.43799 8.82547L5.86955 7.25594C5.70536 7.09175 5.48268 6.99951 5.25049 6.99951C5.01829 6.99951 4.79561 7.09175 4.63142 7.25594C4.46724 7.42012 4.375 7.64281 4.375 7.875C4.375 8.10719 4.46724 8.32988 4.63142 8.49406L6.20096 10.0625L4.63142 11.6309C4.46724 11.7951 4.375 12.0178 4.375 12.25C4.375 12.4822 4.46724 12.7049 4.63142 12.8691C4.79561 13.0332 5.01829 13.1255 5.25049 13.1255C5.48268 13.1255 5.70536 13.0332 5.86955 12.8691ZM23.55 20.5625L25.1196 18.9941C25.2837 18.8299 25.376 18.6072 25.376 18.375C25.376 18.1428 25.2837 17.9201 25.1196 17.7559C24.9554 17.5918 24.7327 17.4995 24.5005 17.4995C24.2683 17.4995 24.0456 17.5918 23.8814 17.7559L22.313 19.3255L20.7446 17.7559C20.5804 17.5918 20.3577 17.4995 20.1255 17.4995C19.8933 17.4995 19.6706 17.5918 19.5064 17.7559C19.3422 17.9201 19.25 18.1428 19.25 18.375C19.25 18.6072 19.3422 18.8299 19.5064 18.9941L21.076 20.5625L19.5064 22.1309C19.3422 22.2951 19.25 22.5178 19.25 22.75C19.25 22.9822 19.3422 23.2049 19.5064 23.3691C19.6706 23.5332 19.8933 23.6255 20.1255 23.6255C20.3577 23.6255 20.5804 23.5332 20.7446 23.3691L22.313 21.7995L23.8814 23.3691C23.9627 23.4504 24.0592 23.5148 24.1655 23.5588C24.2717 23.6028 24.3855 23.6255 24.5005 23.6255C24.6155 23.6255 24.7293 23.6028 24.8355 23.5588C24.9417 23.5148 25.0383 23.4504 25.1196 23.3691C25.2008 23.2878 25.2653 23.1913 25.3093 23.085C25.3533 22.9788 25.376 22.865 25.376 22.75C25.376 22.635 25.3533 22.5212 25.3093 22.415C25.2653 22.3087 25.2008 22.2122 25.1196 22.1309L23.55 20.5625ZM18.1195 5.50594L17.8625 5.25H20.1255C20.3576 5.25 20.5801 5.15781 20.7442 4.99372C20.9083 4.82962 21.0005 4.60706 21.0005 4.375C21.0005 4.14294 20.9083 3.92038 20.7442 3.75628C20.5801 3.59219 20.3576 3.5 20.1255 3.5H15.7505C15.5184 3.5 15.2959 3.59219 15.1318 3.75628C14.9677 3.92038 14.8755 4.14294 14.8755 4.375V8.75C14.8755 8.98206 14.9677 9.20462 15.1318 9.36872C15.2959 9.53281 15.5184 9.625 15.7505 9.625C15.9826 9.625 16.2051 9.53281 16.3692 9.36872C16.5333 9.20462 16.6255 8.98206 16.6255 8.75V6.48703L16.8814 6.74406C18.8425 8.70516 18.8392 10.6159 18.4903 11.8737C17.9828 13.708 16.3728 15.3486 14.6622 15.7763C14.4551 15.8282 14.274 15.954 14.1533 16.1302C14.0325 16.3063 13.9803 16.5205 14.0065 16.7324C14.0328 16.9444 14.1356 17.1394 14.2956 17.2808C14.4557 17.4222 14.6619 17.5001 14.8755 17.5C14.9474 17.5 15.019 17.4912 15.0888 17.4737C17.4086 16.8941 19.502 14.7831 20.178 12.3408C20.8452 9.92906 20.1145 7.50203 18.1195 5.50594Z" fill="#E20C66"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.4 KiB |
3
public/img/svg/books/1/titles-1/si_error-line.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M14.0001 18.6667H14.0094M14.0001 9.33333V15.1667M3.76839 9.23183L9.22839 3.76833C9.40339 3.59333 9.63672 3.5 9.89339 3.5H18.1184C18.3634 3.5 18.6084 3.59333 18.7834 3.76833L24.2317 9.22017C24.4067 9.39517 24.5001 9.6285 24.5001 9.88517V18.1148C24.5001 18.3598 24.4067 18.6048 24.2317 18.7798L18.7834 24.2317C18.6084 24.4067 18.3751 24.5 18.1184 24.5H9.88172C9.75866 24.5013 9.63655 24.4783 9.52242 24.4322C9.40829 24.3862 9.3044 24.318 9.21672 24.2317L3.76839 18.7798C3.68203 18.6922 3.61386 18.5883 3.56781 18.4741C3.52175 18.36 3.49873 18.2379 3.50005 18.1148V9.88517C3.50005 9.64017 3.59339 9.39517 3.76839 9.22017V9.23183Z" stroke="#E20C66" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 848 B |
@ -0,0 +1,10 @@
|
|||||||
|
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_899_158)">
|
||||||
|
<path d="M20.5854 18.8475C21.2857 16.0344 21.1657 13.0796 20.2397 10.3326C19.3137 7.58551 17.6203 5.16109 15.3599 3.34603C17.4233 2.15856 19.7634 1.53641 22.1441 1.54236C23.0471 1.54236 23.9466 1.62986 24.8321 1.80603L25.2054 0.310361C24.1978 0.103323 23.1716 -0.00065638 22.1429 2.76604e-05C19.2578 -0.0054962 16.4317 0.816434 13.9996 2.36836C11.5678 0.816648 8.7421 -0.00527299 5.85742 2.76604e-05C4.82842 2.76604e-05 3.80292 0.103861 2.79492 0.310361L3.16709 1.80603C4.05326 1.63156 4.95424 1.54326 5.85742 1.54236C8.23839 1.53749 10.5788 2.1587 12.6439 3.34369C10.7968 4.82684 9.32244 6.72175 8.33886 8.87679C7.35528 11.0318 6.88977 13.3872 6.97957 15.7544C7.06937 18.1215 7.712 20.4348 8.85603 22.5092C10.0001 24.5835 11.6137 26.3613 13.5679 27.7002L14.0054 28L14.4406 27.7002C17.5019 25.599 19.6906 22.4502 20.5889 18.8475H20.5854ZM13.2296 25.4975C11.2176 23.7594 9.75753 21.4712 9.02895 18.9142C8.30036 16.3572 8.33506 13.643 9.12876 11.1055C9.9061 12.3994 10.8722 13.5701 11.9953 14.5787C12.3846 14.9295 12.6957 15.3584 12.9084 15.8374C13.1211 16.3164 13.2305 16.8348 13.2296 17.3589V25.4975ZM14.0008 14.231C12.9668 13.4642 12.0465 12.5549 11.2673 11.5302C10.768 10.8742 10.4977 10.0726 10.4977 9.24819C10.4977 8.42383 10.768 7.62221 11.2673 6.96619C12.0464 5.93377 12.9684 5.01733 14.0054 4.24436C15.0554 5.02719 15.9853 5.95703 16.7704 7.00469C17.2529 7.65008 17.5136 8.43424 17.5136 9.24003C17.5136 10.0458 17.2529 10.83 16.7704 11.4754C15.9829 12.5209 15.0503 13.4488 14.0008 14.231ZM14.7696 25.4975V17.3589C14.769 16.8346 14.8788 16.3161 15.0918 15.8371C15.3049 15.3581 15.6165 14.9293 16.0063 14.5787C17.1284 13.5699 18.0938 12.3993 18.8704 11.1055C19.6641 13.643 19.6988 16.3572 18.9702 18.9142C18.2416 21.4712 16.7816 23.7594 14.7696 25.4975Z" fill="#E20C66"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_899_158">
|
||||||
|
<rect width="28" height="28" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
3
public/img/svg/books/2/game-icons_heart-key.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M18.594 3.89004C17.1877 3.90567 15.8498 4.35977 14.6975 5.08145C12.0705 6.74551 10.5764 9.79532 11.6897 12.3832L12.3537 13.9359L10.801 13.2719C8.6975 12.3637 6.28734 13.184 4.56859 14.932C4.17504 15.3422 3.80883 15.7914 3.49828 16.2797C1.84105 18.9164 1.59887 22.5199 4.78246 25.7035C7.05394 27.9691 11.5237 28.4672 16.0159 28.3598C18.2717 28.3012 20.4983 28.1156 22.4514 27.9984C22.9397 27.9691 23.4084 27.9398 23.8577 27.9203L42.051 46.1137L44.5315 43.6332L44.5217 43.6234L47.7053 40.4496L45.2248 37.9691L42.0412 41.143L40.2444 39.3461L42.3147 37.2758L39.8342 34.7953L37.7639 36.8656L36.1037 35.2055L41.4846 29.8148L39.0041 27.3344L33.6233 32.725L26.3381 25.4398C26.3577 24.9906 26.387 24.5219 26.4162 24.0336C26.5334 22.0805 26.719 19.8539 26.7776 17.5981C26.8752 13.1156 26.387 8.63809 24.1213 6.36563C22.3342 4.57461 20.4006 3.87051 18.594 3.89004Z" fill="#E51E7D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 984 B |
4
public/img/svg/books/2/icon-park-outline_turn-on.svg
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M21.8752 44.7917C16.9523 42.951 12.8471 36.651 10.7919 32.9615C9.90435 31.3677 10.3721 29.4115 11.796 28.2719C12.5627 27.6588 13.5285 27.35 14.5086 27.4044C15.4887 27.4587 16.4144 27.8726 17.1085 28.5667L18.7502 30.2083V18.2292C18.7502 17.5385 19.0246 16.8761 19.5129 16.3877C20.0013 15.8994 20.6637 15.625 21.3544 15.625C22.045 15.625 22.7074 15.8994 23.1958 16.3877C23.6842 16.8761 23.9585 17.5385 23.9585 18.2292V24.4792C23.9585 23.7885 24.2329 23.1261 24.7213 22.6377C25.2096 22.1494 25.872 21.875 26.5627 21.875C27.2534 21.875 27.9157 22.1494 28.4041 22.6377C28.8925 23.1261 29.1669 23.7885 29.1669 24.4792V26.5625C29.1669 25.8718 29.4412 25.2095 29.9296 24.7211C30.418 24.2327 31.0804 23.9583 31.771 23.9583C32.4617 23.9583 33.1241 24.2327 33.6124 24.7211C34.1008 25.2095 34.3752 25.8718 34.3752 26.5625V28.6458C34.3752 27.9552 34.6496 27.2928 35.1379 26.8044C35.6263 26.316 36.2887 26.0417 36.9794 26.0417C37.67 26.0417 38.3324 26.316 38.8208 26.8044C39.3092 27.2928 39.5835 27.9552 39.5835 28.6458V36.8417C39.5835 37.9562 39.3075 39.0583 38.6648 39.9698C37.5991 41.4792 35.6835 43.7854 33.3335 44.7917C29.6877 46.3542 26.4273 46.4937 21.8752 44.7917Z" stroke="#E51E7D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M12.5 9.37533L15.625 12.5003M19.7917 4.16699L20.8333 10.417M28.125 8.33366L26.0417 11.4587" stroke="#E51E7D" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
6
public/img/svg/books/2/icon-park_play-cycle.svg
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M4.16699 26.042C4.16699 19.1151 9.78808 13.542 16.667 13.542H45.8337" stroke="#E51E7D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M39.584 7.29199L45.834 13.542L39.584 19.792" stroke="#E51E7D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M45.8337 23.959C45.8337 30.8859 40.2126 36.459 33.3337 36.459H4.16699" stroke="#E51E7D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M10.417 42.709L4.16699 36.459L10.417 30.209" stroke="#E51E7D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 702 B |
3
public/img/svg/books/2/iconoir_sparks.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M16.667 31.2503C26.8232 31.2503 31.2503 26.9774 31.2503 16.667C31.2503 26.9774 35.6462 31.2503 45.8337 31.2503C35.6462 31.2503 31.2503 35.6462 31.2503 45.8337C31.2503 35.6462 26.8232 31.2503 16.667 31.2503ZM4.16699 13.542C10.6962 13.542 13.542 10.7962 13.542 4.16699C13.542 10.7962 16.3691 13.542 22.917 13.542C16.3691 13.542 13.542 16.3691 13.542 22.917C13.542 16.3691 10.6962 13.542 4.16699 13.542Z" stroke="#E51E7D" stroke-width="1.5" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 576 B |
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M2.08301 17.6562C2.08301 14.3924 3.17676 11.6757 5.36426 9.50625C7.55176 7.33681 10.2775 6.25139 13.5413 6.25C15.3469 6.25 17.0656 6.63194 18.6976 7.39583C20.3295 8.15972 21.7358 9.23611 22.9163 10.625C24.0969 9.23611 25.5031 8.15972 27.1351 7.39583C28.767 6.63194 30.4858 6.25 32.2913 6.25C34.7566 6.25 36.8747 6.86667 38.6455 8.1C40.4163 9.33333 41.7531 10.9215 42.6559 12.8646C42.899 13.3854 42.9163 13.9153 42.708 14.4542C42.4997 14.9931 42.1351 15.3833 41.6143 15.625C41.0934 15.8667 40.5636 15.884 40.0247 15.6771C39.4858 15.4701 39.0955 15.1056 38.8538 14.5833C38.2288 13.1944 37.3087 12.1528 36.0934 11.4583C34.8781 10.7639 33.6108 10.4167 32.2913 10.4167C30.6941 10.4167 29.2358 10.8681 27.9163 11.7708C26.5969 12.6736 25.4511 13.7847 24.4788 15.1042C24.3052 15.3819 24.0795 15.5819 23.8018 15.7042C23.524 15.8264 23.2288 15.8861 22.9163 15.8833C22.6038 15.8806 22.3087 15.8111 22.0309 15.675C21.7531 15.5389 21.5275 15.3479 21.3538 15.1021C20.3816 13.7826 19.2358 12.6715 17.9163 11.7688C16.5969 10.866 15.1386 10.4153 13.5413 10.4167C11.5622 10.4167 9.85245 11.1028 8.41217 12.475C6.9719 13.8472 6.25106 15.5736 6.24967 17.6542C6.24967 18.8 6.49273 19.9632 6.97884 21.1438C7.46495 22.3243 8.33301 23.6875 9.58301 25.2333C10.833 26.7792 12.5344 28.5847 14.6872 30.65C16.84 32.7153 19.583 35.2069 22.9163 38.125L27.5518 34.0625C27.9684 33.6806 28.4545 33.5069 29.0101 33.5417C29.5656 33.5764 30.0344 33.7847 30.4163 34.1667C30.833 34.5833 31.033 35.0958 31.0163 35.7042C30.9997 36.3125 30.765 36.8069 30.3122 37.1875L25.6768 41.3021C25.2948 41.6493 24.8608 41.9097 24.3747 42.0833C23.8886 42.2569 23.4025 42.3438 22.9163 42.3438C22.4302 42.3438 21.9441 42.2569 21.458 42.0833C20.9719 41.9097 20.5379 41.6319 20.1559 41.25C18.5934 39.8611 16.7795 38.2812 14.7143 36.5104C12.649 34.7396 10.6781 32.8389 8.80176 30.8083C6.92537 28.7778 5.33717 26.6507 4.03717 24.4271C2.73717 22.2035 2.08579 19.9465 2.08301 17.6562ZM37.4997 29.1667H33.333C32.7427 29.1667 32.2483 28.9667 31.8497 28.5667C31.4511 28.1667 31.2511 27.6722 31.2497 27.0833C31.2483 26.4944 31.4483 26 31.8497 25.6C32.2511 25.2 32.7455 25 33.333 25H37.4997V20.8333C37.4997 20.2431 37.6997 19.7486 38.0997 19.35C38.4997 18.9514 38.9941 18.7514 39.583 18.75C40.1719 18.7486 40.667 18.9486 41.0684 19.35C41.4698 19.7514 41.6691 20.2458 41.6663 20.8333V25H45.833C46.4233 25 46.9184 25.2 47.3184 25.6C47.7184 26 47.9177 26.4944 47.9163 27.0833C47.915 27.6722 47.715 28.1674 47.3163 28.5688C46.9177 28.9701 46.4233 29.1694 45.833 29.1667H41.6663V33.3333C41.6663 33.9236 41.4663 34.4187 41.0663 34.8187C40.6663 35.2187 40.1719 35.4181 39.583 35.4167C38.9941 35.4153 38.4997 35.2153 38.0997 34.8167C37.6997 34.4181 37.4997 33.9236 37.4997 33.3333V29.1667Z" fill="#E51E7D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
4
public/img/svg/books/2/titles-2/Group (1).svg
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M5.83089 5.83042C5.99967 5.6617 6.22854 5.56692 6.46719 5.56692C6.70584 5.56692 6.93472 5.6617 7.10349 5.83042L9.04209 7.76812L10.9798 5.83042C11.0628 5.74446 11.1621 5.6759 11.2719 5.62873C11.3817 5.58156 11.4998 5.55674 11.6193 5.5557C11.7388 5.55466 11.8573 5.57743 11.9679 5.62268C12.0786 5.66794 12.179 5.73476 12.2635 5.81927C12.3481 5.90377 12.4149 6.00426 12.4601 6.11487C12.5054 6.22547 12.5282 6.34398 12.5271 6.46348C12.5261 6.58299 12.5013 6.70108 12.4541 6.81089C12.4069 6.92069 12.3384 7.02 12.2524 7.10302L10.3147 9.04162L12.2524 10.9793C12.4163 11.1491 12.507 11.3764 12.505 11.6124C12.5029 11.8484 12.4083 12.0741 12.2414 12.241C12.0746 12.4078 11.8488 12.5025 11.6129 12.5045C11.3769 12.5066 11.1495 12.4159 10.9798 12.2519L9.04209 10.3142L7.10349 12.2519C6.9331 12.4119 6.70714 12.4994 6.47342 12.4957C6.2397 12.4921 6.01657 12.3977 5.85123 12.2325C5.68588 12.0673 5.59131 11.8442 5.58752 11.6105C5.58372 11.3768 5.671 11.1507 5.83089 10.9802L7.76859 9.04252L5.83089 7.10392C5.66217 6.93515 5.56738 6.70627 5.56738 6.46762C5.56738 6.22898 5.66217 6.0001 5.83089 5.83132" fill="#E20C66"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 0C4.0293 0 0 4.0293 0 9C0 13.9707 4.0293 18 9 18C13.9707 18 18 13.9707 18 9C18 4.0293 13.9707 0 9 0ZM1.8 9C1.8 7.09044 2.55857 5.25909 3.90883 3.90883C5.25909 2.55857 7.09044 1.8 9 1.8C10.9096 1.8 12.7409 2.55857 14.0912 3.90883C15.4414 5.25909 16.2 7.09044 16.2 9C16.2 10.9096 15.4414 12.7409 14.0912 14.0912C12.7409 15.4414 10.9096 16.2 9 16.2C7.09044 16.2 5.25909 15.4414 3.90883 14.0912C2.55857 12.7409 1.8 10.9096 1.8 9Z" fill="#E20C66"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
4
public/img/svg/books/2/titles-2/Group.svg
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<svg width="20" height="22" viewBox="0 0 20 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M10 4.8095C11.0465 4.8095 11.895 3.9565 11.895 2.9045C11.895 1.8525 11.0465 1 10 1C8.9535 1 8.105 1.853 8.105 2.905C8.105 3.957 8.9535 4.8095 10 4.8095ZM2.895 19.095C3.941 19.095 4.7895 18.2425 4.7895 17.1905C4.7895 16.1385 3.941 15.2855 2.8945 15.2855C1.848 15.2855 1 16.139 1 17.191C1 18.243 1.8485 19.096 2.895 19.096V19.095ZM17.105 19.095C18.1515 19.095 19 18.2425 19 17.1905C19 16.1385 18.1515 15.2855 17.105 15.2855C16.0585 15.2855 15.21 16.1385 15.21 17.1905C15.21 18.2425 16.0585 19.0955 17.105 19.0955V19.095Z" stroke="#E20C66" stroke-width="2" stroke-linejoin="round"/>
|
||||||
|
<path d="M14.5715 4.15723C15.9231 4.96 17.0423 6.10099 17.8188 7.46783C18.5953 8.83467 19.0024 10.3802 19 11.9522C19 12.2412 18.9867 12.5264 18.96 12.8077M13.507 20.2877C12.3979 20.7589 11.2051 21.0012 10 21.0002C8.75601 21.0002 7.57101 20.7467 6.49301 20.2877M1.04001 12.8077C1.01312 12.5235 0.999777 12.2382 1.00001 11.9527C0.997583 10.3807 1.40468 8.83517 2.18121 7.46833C2.95774 6.10149 4.07692 4.9605 5.42851 4.15773" stroke="#E20C66" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
3
public/img/svg/books/2/titles-2/Vector (4).svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="23" height="23" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M15.5129 0C14.6294 0.0202771 13.6059 0.293052 12.9493 0.692317C12.061 1.24414 11.3996 2.09675 11.0954 3.18302C12.2976 3.66967 13.5914 4.76511 14.9384 6.59971C15.595 7.49769 15.9233 8.44395 15.9667 9.28883C15.8847 10.2206 15.7157 11.0703 15.0108 11.5048C17.0337 12.7504 19.2256 12.6249 20.7995 11.6786C21.9099 11.0124 22.7113 9.93094 22.9382 8.57913C23.1651 7.22733 22.8175 5.58102 21.5285 3.76478C19.6408 1.10607 17.4248 0.0255877 15.5129 0ZM9.70017 3.78457C9.08703 3.7783 8.6139 4.04576 8.23249 4.51889C7.17519 5.83207 7.11243 9.07641 9.36222 12.4125L8.6139 12.9194C7.78833 11.6979 7.23312 10.4717 6.91448 9.3178C6.18547 9.7861 5.73165 10.3654 5.72683 11.0462C5.71717 12.1035 6.2241 13.3056 7.04001 14.3098C7.86075 15.314 8.98081 16.1058 10.1009 16.4003C10.6657 16.55 11.1003 16.4244 11.5203 16.0961C11.723 15.9416 11.9113 15.734 12.09 15.4927C11.6217 15.3864 11.1485 15.2223 10.7623 14.9616L11.2403 14.2567C13.1183 15.3237 14.9915 14.556 16.8647 13.1753C15.8219 12.9677 14.7743 12.5042 13.799 11.7462C13.4997 11.7124 13.1907 11.6207 12.8769 11.471C11.9886 11.051 11.0182 10.1868 9.95604 8.74328L10.6851 8.20739C11.6893 9.57851 12.5824 10.3317 13.2631 10.6551C13.9439 10.9786 14.3446 10.9013 14.6246 10.6744C14.9046 10.4524 15.0977 9.97922 15.0639 9.33711C15.035 8.69018 14.7694 7.90323 14.2094 7.1356C12.8045 5.21893 11.501 4.23887 10.4871 3.9212C10.2216 3.8512 9.94156 3.78892 9.70017 3.78457ZM4.93505 13.2622L4.09018 13.576C4.68883 15.2175 6.59102 16.4775 8.58976 16.7624C7.32002 15.7678 5.52888 14.7009 4.93505 13.2622ZM3.18205 15.0195L2.33476 15.3285C2.99714 17.1341 5.22956 18.4859 7.44072 18.5728L7.47934 17.67C5.63027 17.5976 3.65325 16.3037 3.18205 15.0195ZM1.4276 16.772L0.580311 17.081C1.2427 18.8915 3.47511 20.2385 5.6882 20.3302L5.72683 19.4274C4.095 19.0653 2.00453 18.1818 1.4276 16.772ZM0 19.1377V20.4895C1.0211 21.4116 2.47622 22.0248 3.93568 22.0827L3.96948 21.1799C2.48105 20.895 0.811566 20.2336 0 19.1377ZM0 22.3434V23H2.33283C1.47926 22.8986 0.653694 22.6814 0 22.3434Z" fill="#E20C66"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
3
public/img/svg/books/2/titles-2/Vector (6).svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M6 9C6.28333 9 6.521 8.904 6.713 8.712C6.905 8.52 7.00067 8.28267 7 8C6.99933 7.71733 6.90333 7.48 6.712 7.288C6.52067 7.096 6.28333 7 6 7C5.71667 7 5.47933 7.096 5.288 7.288C5.09667 7.48 5.00067 7.71733 5 8C4.99933 8.28267 5.09533 8.52033 5.288 8.713C5.48067 8.90567 5.718 9.00133 6 9ZM10 9C10.2833 9 10.521 8.904 10.713 8.712C10.905 8.52 11.0007 8.28267 11 8C10.9993 7.71733 10.9033 7.48 10.712 7.288C10.5207 7.096 10.2833 7 10 7C9.71667 7 9.47933 7.096 9.288 7.288C9.09667 7.48 9.00067 7.71733 9 8C8.99933 8.28267 9.09533 8.52033 9.288 8.713C9.48067 8.90567 9.718 9.00133 10 9ZM14 9C14.2833 9 14.521 8.904 14.713 8.712C14.905 8.52 15.0007 8.28267 15 8C14.9993 7.71733 14.9033 7.48 14.712 7.288C14.5207 7.096 14.2833 7 14 7C13.7167 7 13.4793 7.096 13.288 7.288C13.0967 7.48 13.0007 7.71733 13 8C12.9993 8.28267 13.0953 8.52033 13.288 8.713C13.4807 8.90567 13.718 9.00133 14 9ZM0 20V2C0 1.45 0.196 0.979333 0.588 0.588C0.98 0.196667 1.45067 0.000666667 2 0H18C18.55 0 19.021 0.196 19.413 0.588C19.805 0.98 20.0007 1.45067 20 2V14C20 14.55 19.8043 15.021 19.413 15.413C19.0217 15.805 18.5507 16.0007 18 16H4L0 20ZM3.15 14H18V2H2V15.125L3.15 14Z" fill="#E20C66"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
3
public/img/svg/books/2/titles-2/Vector (7).svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="16" height="21" viewBox="0 0 16 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M14.6344 0H10.8844C10.586 0 10.2999 0.118526 10.0889 0.329505C9.87791 0.540483 9.75939 0.826631 9.75939 1.125C9.75939 1.42337 9.87791 1.70952 10.0889 1.9205C10.2999 2.13147 10.586 2.25 10.8844 2.25H11.9156L10.4494 3.71906C9.69859 3.09516 8.81454 2.65201 7.8654 2.42379C6.91626 2.19557 5.92739 2.18837 4.97503 2.40274C4.02267 2.61712 3.13226 3.04734 2.37246 3.66024C1.61265 4.27314 1.00375 5.05235 0.592706 5.93778C0.181658 6.82321 -0.020558 7.79122 0.00165012 8.76715C0.0238583 9.74309 0.269897 10.7009 0.720796 11.5667C1.17169 12.4325 1.81541 13.1832 2.6023 13.7609C3.3892 14.3386 4.29826 14.7279 5.25938 14.8988V16.125H3.38438C3.08602 16.125 2.79987 16.2435 2.58889 16.4545C2.37791 16.6655 2.25938 16.9516 2.25938 17.25C2.25938 17.5484 2.37791 17.8345 2.58889 18.0455C2.79987 18.2565 3.08602 18.375 3.38438 18.375H5.25938V19.875C5.25938 20.1734 5.37791 20.4595 5.58889 20.6705C5.79987 20.8815 6.08602 21 6.38439 21C6.68275 21 6.9689 20.8815 7.17988 20.6705C7.39086 20.4595 7.50939 20.1734 7.50939 19.875V18.375H9.38439C9.68275 18.375 9.9689 18.2565 10.1799 18.0455C10.3909 17.8345 10.5094 17.5484 10.5094 17.25C10.5094 16.9516 10.3909 16.6655 10.1799 16.4545C9.9689 16.2435 9.68275 16.125 9.38439 16.125H7.50939V14.8988C8.51622 14.7192 9.465 14.2997 10.2755 13.6759C11.0859 13.0521 11.7342 12.2423 12.1655 11.3149C12.5968 10.3876 12.7984 9.37001 12.7533 8.34828C12.7082 7.32654 12.4176 6.33071 11.9063 5.445L13.5094 3.84375V4.875C13.5094 5.17337 13.6279 5.45952 13.8389 5.6705C14.0499 5.88147 14.336 6 14.6344 6C14.9328 6 15.2189 5.88147 15.4299 5.6705C15.6409 5.45952 15.7594 5.17337 15.7594 4.875V1.125C15.7594 0.826631 15.6409 0.540483 15.4299 0.329505C15.2189 0.118526 14.9328 0 14.6344 0ZM6.38439 12.75C5.56854 12.75 4.77101 12.5081 4.09266 12.0548C3.4143 11.6016 2.88559 10.9573 2.57338 10.2036C2.26117 9.44982 2.17948 8.62042 2.33865 7.82025C2.49781 7.02008 2.89068 6.28508 3.46757 5.70818C4.04446 5.13129 4.77947 4.73843 5.57964 4.57926C6.37981 4.4201 7.20921 4.50179 7.96295 4.814C8.7167 5.12621 9.36094 5.65492 9.8142 6.33327C10.2675 7.01163 10.5094 7.80915 10.5094 8.625C10.5081 9.71864 10.0731 10.7671 9.29983 11.5404C8.52651 12.3138 7.47802 12.7488 6.38439 12.75Z" fill="#E20C66"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
3
public/img/svg/books/2/titles-2/Vector (8).svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="18" height="20" viewBox="0 0 18 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M0 16.5V3C0 2.20435 0.316071 1.44129 0.87868 0.87868C1.44129 0.316071 2.20435 0 3 0H17C17.2652 0 17.5196 0.105357 17.7071 0.292893C17.8946 0.48043 18 0.734784 18 1V19C18 19.2652 17.8946 19.5196 17.7071 19.7071C17.5196 19.8946 17.2652 20 17 20H3.5C2.57174 20 1.6815 19.6313 1.02513 18.9749C0.368749 18.3185 0 17.4283 0 16.5ZM16 18V15H3.5C3.10218 15 2.72064 15.158 2.43934 15.4393C2.15804 15.7206 2 16.1022 2 16.5C2 16.8978 2.15804 17.2794 2.43934 17.5607C2.72064 17.842 3.10218 18 3.5 18H16ZM2 13.337C2.46884 13.1149 2.9812 12.9998 3.5 13H16V2H3C2.73478 2 2.48043 2.10536 2.29289 2.29289C2.10536 2.48043 2 2.73478 2 3V13.337Z" fill="#E20C66"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 755 B |
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="27" height="27" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M13.6125 20.8687L13.5 20.9812L13.3763 20.8687C8.0325 16.02 4.5 12.8138 4.5 9.5625C4.5 7.3125 6.1875 5.625 8.4375 5.625C10.17 5.625 11.8575 6.75 12.4537 8.28H14.5463C15.1425 6.75 16.83 5.625 18.5625 5.625C20.8125 5.625 22.5 7.3125 22.5 9.5625C22.5 12.8138 18.9675 16.02 13.6125 20.8687ZM18.5625 3.375C16.605 3.375 14.7262 4.28625 13.5 5.715C12.2738 4.28625 10.395 3.375 8.4375 3.375C4.9725 3.375 2.25 6.08625 2.25 9.5625C2.25 13.8038 6.075 17.28 11.8688 22.5338L13.5 24.0188L15.1312 22.5338C20.925 17.28 24.75 13.8038 24.75 9.5625C24.75 6.08625 22.0275 3.375 18.5625 3.375Z" fill="#E20C66"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 703 B |