style: run formatter
This commit is contained in:
parent
b5eae39f89
commit
35f5343149
20 changed files with 207 additions and 264 deletions
60
src/App.vue
60
src/App.vue
|
@ -1,49 +1,45 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from "vue";
|
import { ref } from 'vue'
|
||||||
import { RouterView } from "vue-router";
|
import { RouterView } from 'vue-router'
|
||||||
import { version } from "../package.json";
|
import { version } from '../package.json'
|
||||||
import router from "@/router";
|
import router from '@/router'
|
||||||
|
|
||||||
import ModalDialog from "@/components/ModalDialog.vue";
|
import ModalDialog from '@/components/ModalDialog.vue'
|
||||||
import LocaleSwitcher from "@/components/LocaleSwitcher.vue";
|
import LocaleSwitcher from '@/components/LocaleSwitcher.vue'
|
||||||
import LinkButton from "@/components/LinkButton.vue";
|
import LinkButton from '@/components/LinkButton.vue'
|
||||||
import SiteNavigation from "@/components/SiteNavigation.vue";
|
import SiteNavigation from '@/components/SiteNavigation.vue'
|
||||||
import NavigationItem from "@/components/NavigationItem.vue";
|
import NavigationItem from '@/components/NavigationItem.vue'
|
||||||
import LanguageButton from "@/components/LanguageButton.vue";
|
import LanguageButton from '@/components/LanguageButton.vue'
|
||||||
import SiteFooter from "@/components/SiteFooter.vue";
|
import SiteFooter from '@/components/SiteFooter.vue'
|
||||||
|
|
||||||
import LanguageIcon from "@/assets/icons/LanguageIcon.vue";
|
import LanguageIcon from '@/assets/icons/LanguageIcon.vue'
|
||||||
|
|
||||||
const locales = [
|
const locales = [
|
||||||
{ code: "en", name: "English", flag: "🇬🇧" },
|
{ code: 'en', name: 'English', flag: '🇬🇧' },
|
||||||
{ code: "de", name: "Deutsch", flag: "🇩🇪" },
|
{ code: 'de', name: 'Deutsch', flag: '🇩🇪' }
|
||||||
];
|
]
|
||||||
|
|
||||||
const langswitcher = ref<InstanceType<typeof ModalDialog>>();
|
const langswitcher = ref<InstanceType<typeof ModalDialog>>()
|
||||||
|
|
||||||
const showModal = () => {
|
const showModal = () => {
|
||||||
langswitcher.value?.showModal();
|
langswitcher.value?.showModal()
|
||||||
};
|
}
|
||||||
|
|
||||||
const close = () => {
|
const close = () => {
|
||||||
langswitcher.value?.close();
|
langswitcher.value?.close()
|
||||||
};
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ModalDialog id="lang-select" ref="langswitcher">
|
<ModalDialog id="lang-select" ref="langswitcher">
|
||||||
<template #heading>{{ $t("langswitcher.title") }}</template>
|
<template #heading>{{ $t('langswitcher.title') }}</template>
|
||||||
<template #message>
|
<template #message>
|
||||||
<p>{{ $t("langswitcher.prompt") }}</p>
|
<p>{{ $t('langswitcher.prompt') }}</p>
|
||||||
<LocaleSwitcher
|
<LocaleSwitcher id="locale-switch" v-model="$i18n.locale" :locales="locales" />
|
||||||
id="locale-switch"
|
|
||||||
v-model="$i18n.locale"
|
|
||||||
:locales="locales"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
<template #buttons>
|
<template #buttons>
|
||||||
<LinkButton @click.prevent="close()">
|
<LinkButton @click.prevent="close()">
|
||||||
{{ $t("langswitcher.buttonClose") }}
|
{{ $t('langswitcher.buttonClose') }}
|
||||||
</LinkButton>
|
</LinkButton>
|
||||||
</template>
|
</template>
|
||||||
</ModalDialog>
|
</ModalDialog>
|
||||||
|
@ -54,7 +50,9 @@ const close = () => {
|
||||||
:key="idx"
|
:key="idx"
|
||||||
:icon="route.meta?.icon"
|
:icon="route.meta?.icon"
|
||||||
:href="route.path"
|
:href="route.path"
|
||||||
>{{ $t(`${route.meta?.title}`) }}</NavigationItem>
|
>
|
||||||
|
{{ $t(`${route.meta?.title}`) }}
|
||||||
|
</NavigationItem>
|
||||||
</SiteNavigation>
|
</SiteNavigation>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
|
@ -64,7 +62,5 @@ const close = () => {
|
||||||
<RouterView />
|
<RouterView />
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<SiteFooter>
|
<SiteFooter>v{{ version }} © {{ new Date().getFullYear() }} Sebin Nyshkim</SiteFooter>
|
||||||
v{{ version }} © {{ new Date().getFullYear() }} Sebin Nyshkim
|
|
||||||
</SiteFooter>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import FAIcon from "@/assets/icons/FurAffinityIcon.vue";
|
import FAIcon from '@/assets/icons/FurAffinityIcon.vue'
|
||||||
import TwitterIcon from "@/assets/icons/TwitterIcon.vue";
|
import TwitterIcon from '@/assets/icons/TwitterIcon.vue'
|
||||||
|
|
||||||
interface ArtistLink {
|
interface ArtistLink {
|
||||||
furaffinity?: string;
|
furaffinity?: string
|
||||||
twitter?: string;
|
twitter?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Attribution {
|
interface Attribution {
|
||||||
artwork: string;
|
artwork: string
|
||||||
artist: string;
|
artist: string
|
||||||
links: ArtistLink;
|
links: ArtistLink
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
attributions: Attribution[];
|
attributions: Attribution[]
|
||||||
}
|
}
|
||||||
|
|
||||||
defineProps<Props>();
|
defineProps<Props>()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -25,19 +25,15 @@ defineProps<Props>();
|
||||||
<thead class="attribution-table__head">
|
<thead class="attribution-table__head">
|
||||||
<tr class="attribution-table__row">
|
<tr class="attribution-table__row">
|
||||||
<th class="attribution-table__heading artwork">
|
<th class="attribution-table__heading artwork">
|
||||||
{{ $t("attributions.artwork.headings[0]") }}
|
{{ $t('attributions.artwork.headings[0]') }}
|
||||||
</th>
|
</th>
|
||||||
<th class="attribution-table__heading artist">
|
<th class="attribution-table__heading artist">
|
||||||
{{ $t("attributions.artwork.headings[1]") }}
|
{{ $t('attributions.artwork.headings[1]') }}
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="attribution-table__body">
|
<tbody class="attribution-table__body">
|
||||||
<tr
|
<tr class="attribution-table__row" v-for="(attrib, idx) in attributions" :key="idx">
|
||||||
class="attribution-table__row"
|
|
||||||
v-for="(attrib, idx) in attributions"
|
|
||||||
:key="idx"
|
|
||||||
>
|
|
||||||
<td class="attribution-table__cell artwork">
|
<td class="attribution-table__cell artwork">
|
||||||
<img :src="attrib.artwork" alt="Image attribution" />
|
<img :src="attrib.artwork" alt="Image attribution" />
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -1,33 +1,30 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
interface ColorDict {
|
interface ColorDict {
|
||||||
name: string;
|
name: string
|
||||||
value: string;
|
value: string
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
colors: ColorDict[];
|
colors: ColorDict[]
|
||||||
}
|
}
|
||||||
|
|
||||||
defineProps<Props>();
|
defineProps<Props>()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<table class="color-table">
|
<table class="color-table">
|
||||||
<thead class="color-table__head">
|
<thead class="color-table__head">
|
||||||
<tr class="color-table__row">
|
<tr class="color-table__row">
|
||||||
<th class="color-table__heading name">{{ $t("data.colors.headings[0]") }}</th>
|
<th class="color-table__heading name">{{ $t('data.colors.headings[0]') }}</th>
|
||||||
<th class="color-table__heading value">{{ $t("data.colors.headings[1]") }}</th>
|
<th class="color-table__heading value">{{ $t('data.colors.headings[1]') }}</th>
|
||||||
<th class="color-table__heading color">{{ $t("data.colors.headings[2]") }}</th>
|
<th class="color-table__heading color">{{ $t('data.colors.headings[2]') }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="color-table__body">
|
<tbody class="color-table__body">
|
||||||
<tr class="color-table__row" v-for="(color, idx) in colors" :key="idx">
|
<tr class="color-table__row" v-for="(color, idx) in colors" :key="idx">
|
||||||
<td class="color-table__cell name">{{ $t(color.name) }}</td>
|
<td class="color-table__cell name">{{ $t(color.name) }}</td>
|
||||||
<td class="color-table__cell value">{{ color.value }}</td>
|
<td class="color-table__cell value">{{ color.value }}</td>
|
||||||
<td
|
<td class="color-table__cell color" :style="{ 'background-color': color.value }"></td>
|
||||||
class="color-table__cell color"
|
|
||||||
:style="{ 'background-color': color.value }"
|
|
||||||
></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@ -47,8 +44,16 @@ defineProps<Props>();
|
||||||
}
|
}
|
||||||
|
|
||||||
&.value {
|
&.value {
|
||||||
font-family: Menlo, JetBrains Mono, Source Code Pro, Monaco, Ubuntu Mono,
|
font-family:
|
||||||
Roboto Mono, Cascadia Code, Consolas, monospace;
|
Menlo,
|
||||||
|
JetBrains Mono,
|
||||||
|
Source Code Pro,
|
||||||
|
Monaco,
|
||||||
|
Ubuntu Mono,
|
||||||
|
Roboto Mono,
|
||||||
|
Cascadia Code,
|
||||||
|
Consolas,
|
||||||
|
monospace;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,17 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
interface Props {
|
interface Props {
|
||||||
headings: string[];
|
headings: string[]
|
||||||
data: string[][];
|
data: string[][]
|
||||||
}
|
}
|
||||||
|
|
||||||
defineProps<Props>();
|
defineProps<Props>()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<table class="data-table">
|
<table class="data-table">
|
||||||
<thead class="data-table__head">
|
<thead class="data-table__head">
|
||||||
<tr class="data-table__row">
|
<tr class="data-table__row">
|
||||||
<th
|
<th class="data-table__heading" v-for="(heading, idx) in headings" :key="idx">
|
||||||
class="data-table__heading"
|
|
||||||
v-for="(heading, idx) in headings"
|
|
||||||
:key="idx"
|
|
||||||
>
|
|
||||||
{{ $t(heading) }}
|
{{ $t(heading) }}
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
&:before {
|
&:before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
inset: 0.325rem 0 0.7rem 0;
|
inset: 0.325rem 0 0.7rem 0;
|
||||||
content: "";
|
content: '';
|
||||||
background-color: var(--color-background);
|
background-color: var(--color-background);
|
||||||
border-radius: 0.3rem;
|
border-radius: 0.3rem;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
interface Props {
|
interface Props {
|
||||||
href?: string;
|
href?: string
|
||||||
download?: boolean | any;
|
download?: boolean | any
|
||||||
}
|
}
|
||||||
|
|
||||||
defineProps<Props>();
|
defineProps<Props>()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from "vue";
|
import { ref } from 'vue'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
id: string;
|
id: string
|
||||||
}
|
}
|
||||||
|
|
||||||
defineProps<Props>();
|
defineProps<Props>()
|
||||||
|
|
||||||
const modal = ref<HTMLDialogElement>();
|
const modal = ref<HTMLDialogElement>()
|
||||||
|
|
||||||
const showModal = () => {
|
const showModal = () => {
|
||||||
modal.value?.showModal();
|
modal.value?.showModal()
|
||||||
document.body.inert = true;
|
document.body.inert = true
|
||||||
document.body.classList.add("scroll-lock");
|
document.body.classList.add('scroll-lock')
|
||||||
};
|
}
|
||||||
|
|
||||||
const close = () => {
|
const close = () => {
|
||||||
modal.value?.close();
|
modal.value?.close()
|
||||||
document.body.inert = false;
|
document.body.inert = false
|
||||||
document.body.classList.remove("scroll-lock");
|
document.body.classList.remove('scroll-lock')
|
||||||
};
|
}
|
||||||
|
|
||||||
defineExpose({ showModal, close });
|
defineExpose({ showModal, close })
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { RouterLink } from "vue-router";
|
import { RouterLink } from 'vue-router'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
icon: unknown | object;
|
icon: unknown | object
|
||||||
href: string;
|
href: string
|
||||||
}
|
}
|
||||||
|
|
||||||
defineProps<Props>();
|
defineProps<Props>()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -1,17 +1,14 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
interface Props {
|
interface Props {
|
||||||
dropshadow?: boolean;
|
dropshadow?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
defineProps<Props>();
|
defineProps<Props>()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<figure class="figure">
|
<figure class="figure">
|
||||||
<picture
|
<picture class="figure__image" :class="{ 'figure__image--dropshadow': dropshadow }">
|
||||||
class="figure__image"
|
|
||||||
:class="{ 'figure__image--dropshadow': dropshadow }"
|
|
||||||
>
|
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</picture>
|
</picture>
|
||||||
|
|
||||||
|
|
|
@ -26,12 +26,11 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&:not(:last-child):before {
|
&:not(:last-child):before {
|
||||||
content: "";
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
inset: var(--timeline-stroke-position-odd);
|
inset: var(--timeline-stroke-position-odd);
|
||||||
height: var(--timeline-stroke-length);
|
height: var(--timeline-stroke-length);
|
||||||
border-left: var(--timeline-stroke-thickness) solid
|
border-left: var(--timeline-stroke-thickness) solid var(--timeline-stroke-color);
|
||||||
var(--timeline-stroke-color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&:nth-child(odd) {
|
&:nth-child(odd) {
|
||||||
|
@ -58,8 +57,7 @@
|
||||||
background-color: var(--timeline-circle-background);
|
background-color: var(--timeline-circle-background);
|
||||||
|
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border: var(--timeline-stroke-thickness) solid
|
border: var(--timeline-stroke-thickness) solid var(--timeline-stroke-color);
|
||||||
var(--timeline-stroke-color);
|
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
padding: var(--timeline-circle-padding);
|
padding: var(--timeline-circle-padding);
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,7 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 0 var(--container-spacing-right-safe) 0
|
padding: 0 var(--container-spacing-right-safe) 0 var(--container-spacing-left-safe);
|
||||||
var(--container-spacing-left-safe);
|
|
||||||
|
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,8 @@
|
||||||
<header class="welcome">
|
<header class="welcome">
|
||||||
<div class="welcome__image">
|
<div class="welcome__image">
|
||||||
<picture>
|
<picture>
|
||||||
<source
|
<source srcset="@/assets/viktor-avatar.png?w=400;800&format=avif&quality=75&as=srcset" />
|
||||||
srcset="@/assets/viktor-avatar.png?w=400;800&format=avif&quality=75&as=srcset"
|
<source srcset="@/assets/viktor-avatar.png?w=400;800&format=webp&quality=100&as=srcset" />
|
||||||
/>
|
|
||||||
<source
|
|
||||||
srcset="@/assets/viktor-avatar.png?w=400;800&format=webp&quality=100&as=srcset"
|
|
||||||
/>
|
|
||||||
<img src="@/assets/viktor-avatar.png?w=400&format=png" alt="Viktor Avatar" />
|
<img src="@/assets/viktor-avatar.png?w=400&format=png" alt="Viktor Avatar" />
|
||||||
</picture>
|
</picture>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import en from "./translations/en.json";
|
import en from './translations/en.json'
|
||||||
import de from "./translations/de.json";
|
import de from './translations/de.json'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
en,
|
en,
|
||||||
de,
|
de
|
||||||
};
|
}
|
||||||
|
|
30
src/main.ts
30
src/main.ts
|
@ -1,21 +1,21 @@
|
||||||
import { createApp } from "vue";
|
import { createApp } from 'vue'
|
||||||
import App from "./App.vue";
|
import App from './App.vue'
|
||||||
import router from "./router";
|
import router from './router'
|
||||||
import { createI18n } from "vue-i18n";
|
import { createI18n } from 'vue-i18n'
|
||||||
import messages from "./lang";
|
import messages from './lang'
|
||||||
|
|
||||||
import "normalize.css";
|
import 'normalize.css'
|
||||||
import "@/scss/main.scss";
|
import '@/scss/main.scss'
|
||||||
|
|
||||||
const i18n = createI18n({
|
const i18n = createI18n({
|
||||||
locale: "en",
|
locale: 'en',
|
||||||
fallbackLocale: "en",
|
fallbackLocale: 'en',
|
||||||
messages,
|
messages
|
||||||
});
|
})
|
||||||
|
|
||||||
const app = createApp(App);
|
const app = createApp(App)
|
||||||
|
|
||||||
app.use(router);
|
app.use(router)
|
||||||
app.use(i18n);
|
app.use(i18n)
|
||||||
|
|
||||||
app.mount("body");
|
app.mount('body')
|
||||||
|
|
|
@ -1,64 +1,64 @@
|
||||||
import { createRouter, createWebHistory } from "vue-router";
|
import { createRouter, createWebHistory } from 'vue-router'
|
||||||
import HomeView from "../views/HomeView.vue";
|
import HomeView from '@/views/HomeView.vue'
|
||||||
|
|
||||||
import HomeIcon from "@/assets/icons/HomeIcon.vue";
|
import HomeIcon from '@/assets/icons/HomeIcon.vue'
|
||||||
import IdCardIcon from "@/assets/icons/IdCardIcon.vue";
|
import IdCardIcon from '@/assets/icons/IdCardIcon.vue'
|
||||||
import PaletteIcon from "@/assets/icons/PaletteIcon.vue";
|
import PaletteIcon from '@/assets/icons/PaletteIcon.vue'
|
||||||
import BriefcaseIcon from "@/assets/icons/BriefcaseIcon.vue";
|
import BriefcaseIcon from '@/assets/icons/BriefcaseIcon.vue'
|
||||||
import CircleInfoIcon from "@/assets/icons/CircleInfoIcon.vue";
|
import CircleInfoIcon from '@/assets/icons/CircleInfoIcon.vue'
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
history: createWebHistory(import.meta.env.BASE_URL),
|
history: createWebHistory(import.meta.env.BASE_URL),
|
||||||
scrollBehavior: () => {
|
scrollBehavior: () => {
|
||||||
return { top: 0 };
|
return { top: 0 }
|
||||||
},
|
},
|
||||||
routes: [
|
routes: [
|
||||||
{
|
{
|
||||||
path: "/",
|
path: '/',
|
||||||
name: "home",
|
name: 'home',
|
||||||
component: HomeView,
|
component: HomeView,
|
||||||
meta: {
|
meta: {
|
||||||
title: "nav.home",
|
title: 'nav.home',
|
||||||
icon: HomeIcon,
|
icon: HomeIcon
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/general",
|
path: '/general',
|
||||||
name: "general",
|
name: 'general',
|
||||||
component: () => import("@/views/GeneralView.vue"),
|
component: () => import('@/views/GeneralView.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: "nav.general",
|
title: 'nav.general',
|
||||||
icon: IdCardIcon,
|
icon: IdCardIcon
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/anatomy",
|
path: '/anatomy',
|
||||||
name: "anatomy",
|
name: 'anatomy',
|
||||||
component: () => import("@/views/AnatomyView.vue"),
|
component: () => import('@/views/AnatomyView.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: "nav.anatomy",
|
title: 'nav.anatomy',
|
||||||
icon: PaletteIcon,
|
icon: PaletteIcon
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/career-path",
|
path: '/career-path',
|
||||||
name: "career-path",
|
name: 'career-path',
|
||||||
component: () => import("@/views/CareerPathView.vue"),
|
component: () => import('@/views/CareerPathView.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: "nav.careerPath",
|
title: 'nav.careerPath',
|
||||||
icon: BriefcaseIcon,
|
icon: BriefcaseIcon
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/attributions",
|
path: '/attributions',
|
||||||
name: "attributions",
|
name: 'attributions',
|
||||||
component: () => import("@/views/AttributionsView.vue"),
|
component: () => import('@/views/AttributionsView.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: "nav.attributions",
|
title: 'nav.attributions',
|
||||||
icon: CircleInfoIcon,
|
icon: CircleInfoIcon
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
],
|
]
|
||||||
});
|
})
|
||||||
|
|
||||||
export default router;
|
export default router
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
@import "fontfaces";
|
@import 'fontfaces';
|
||||||
|
|
||||||
/* theme colors */
|
/* theme colors */
|
||||||
:root {
|
:root {
|
||||||
|
@ -33,8 +33,8 @@
|
||||||
|
|
||||||
/* general purpose variables */
|
/* general purpose variables */
|
||||||
:root {
|
:root {
|
||||||
--font-family-copy: "Arvo", sans-serif;
|
--font-family-copy: 'Arvo', sans-serif;
|
||||||
--font-family-headings: "Secular One", serif;
|
--font-family-headings: 'Secular One', serif;
|
||||||
|
|
||||||
--font-size: 18px;
|
--font-size: 18px;
|
||||||
--text-line-height: 1.5;
|
--text-line-height: 1.5;
|
||||||
|
@ -54,8 +54,7 @@
|
||||||
--container-spacing-bottom-safe: max(1rem, env(safe-area-inset-bottom));
|
--container-spacing-bottom-safe: max(1rem, env(safe-area-inset-bottom));
|
||||||
--container-spacing-left-safe: max(1rem, env(safe-area-inset-left));
|
--container-spacing-left-safe: max(1rem, env(safe-area-inset-left));
|
||||||
|
|
||||||
--textblock-padding: 0 var(--container-spacing-right-safe) 0
|
--textblock-padding: 0 var(--container-spacing-right-safe) 0 var(--container-spacing-left-safe);
|
||||||
var(--container-spacing-left-safe);
|
|
||||||
|
|
||||||
--welcome-padding: 2rem var(--container-spacing-right-safe) 2rem
|
--welcome-padding: 2rem var(--container-spacing-right-safe) 2rem
|
||||||
var(--container-spacing-left-safe);
|
var(--container-spacing-left-safe);
|
||||||
|
@ -75,19 +74,14 @@
|
||||||
--navigation-height: auto;
|
--navigation-height: auto;
|
||||||
--navigation-padding: 0 0 0 env(safe-area-inset-left);
|
--navigation-padding: 0 0 0 env(safe-area-inset-left);
|
||||||
|
|
||||||
--navigation-cutout: 0 0
|
--navigation-cutout: 0 0 calc(var(--navigation-size) + env(safe-area-inset-bottom)) 0;
|
||||||
calc(var(--navigation-size) + env(safe-area-inset-bottom)) 0;
|
--navigation-cutout-page-background: calc(var(--navigation-size) + env(safe-area-inset-bottom));
|
||||||
--navigation-cutout-page-background: calc(
|
|
||||||
var(--navigation-size) + env(safe-area-inset-bottom)
|
|
||||||
);
|
|
||||||
--navigation-cutout-main: 0;
|
--navigation-cutout-main: 0;
|
||||||
|
|
||||||
--navigation-link-display: none;
|
--navigation-link-display: none;
|
||||||
--navigation-link-flex: 1 0 var(--navigation-size);
|
--navigation-link-flex: 1 0 var(--navigation-size);
|
||||||
--navigation-link-justify: center;
|
--navigation-link-justify: center;
|
||||||
--navigation-link-height: calc(
|
--navigation-link-height: calc(var(--navigation-size) + env(safe-area-inset-bottom));
|
||||||
var(--navigation-size) + env(safe-area-inset-bottom)
|
|
||||||
);
|
|
||||||
--navigation-link-padding: 0 0 env(safe-area-inset-bottom) 0;
|
--navigation-link-padding: 0 0 env(safe-area-inset-bottom) 0;
|
||||||
--navigation-link-icon-size: calc(var(--navigation-size) / 2);
|
--navigation-link-icon-size: calc(var(--navigation-size) / 2);
|
||||||
--navigation-link-icon-spacing: calc(var(--navigation-size) * 0.25);
|
--navigation-link-icon-spacing: calc(var(--navigation-size) * 0.25);
|
||||||
|
@ -118,13 +112,10 @@
|
||||||
--timeline-item-margin-even: var(--timeline-item-margin);
|
--timeline-item-margin-even: var(--timeline-item-margin);
|
||||||
--timeline-item-text-align-even: left;
|
--timeline-item-text-align-even: left;
|
||||||
--timeline-item-content-padding-odd: 0 0 0 var(--container-spacing-left-safe);
|
--timeline-item-content-padding-odd: 0 0 0 var(--container-spacing-left-safe);
|
||||||
--timeline-item-content-padding-even: var(
|
--timeline-item-content-padding-even: var(--timeline-item-content-padding-odd);
|
||||||
--timeline-item-content-padding-odd
|
|
||||||
);
|
|
||||||
|
|
||||||
--table-border-radius: 1rem;
|
--table-border-radius: 1rem;
|
||||||
--table-outer-spacing: 0 var(--container-spacing-right-safe) 0
|
--table-outer-spacing: 0 var(--container-spacing-right-safe) 0 var(--container-spacing-left-safe);
|
||||||
var(--container-spacing-left-safe);
|
|
||||||
--table-cell-padding: 0.25rem 0.5rem;
|
--table-cell-padding: 0.25rem 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,11 +216,9 @@
|
||||||
--page-background-image-max-height: 100vh;
|
--page-background-image-max-height: 100vh;
|
||||||
|
|
||||||
--color-table-color-cell-width: 10rem;
|
--color-table-color-cell-width: 10rem;
|
||||||
--textblock-padding: 0 var(--container-spacing-right-safe) 0
|
--textblock-padding: 0 var(--container-spacing-right-safe) 0 var(--container-spacing-left-safe);
|
||||||
var(--container-spacing-left-safe);
|
|
||||||
|
|
||||||
--navigation-cutout: 0 0 0
|
--navigation-cutout: 0 0 0 calc(var(--navigation-size) + env(safe-area-inset-left));
|
||||||
calc(var(--navigation-size) + env(safe-area-inset-left));
|
|
||||||
--navigation-cutout-page-background: 0;
|
--navigation-cutout-page-background: 0;
|
||||||
--navigation-cutout-main: var(--navigation-cutout);
|
--navigation-cutout-main: var(--navigation-cutout);
|
||||||
|
|
||||||
|
@ -238,9 +227,7 @@
|
||||||
--navigation-align: stretch;
|
--navigation-align: stretch;
|
||||||
--navigation-position: 0 auto 0 0;
|
--navigation-position: 0 auto 0 0;
|
||||||
|
|
||||||
--navigation-width: calc(
|
--navigation-width: calc(var(--navigation-size) + env(safe-area-inset-left));
|
||||||
var(--navigation-size) + env(safe-area-inset-left)
|
|
||||||
);
|
|
||||||
--navigation-width-expanded: var(--navigation-width);
|
--navigation-width-expanded: var(--navigation-width);
|
||||||
|
|
||||||
--navigation-link-display: block;
|
--navigation-link-display: block;
|
||||||
|
@ -271,10 +258,8 @@
|
||||||
--timeline-stroke-length: calc(100% - var(--timeline-circle-size));
|
--timeline-stroke-length: calc(100% - var(--timeline-circle-size));
|
||||||
--timeline-stroke-position-even: var(--timeline-stroke-position-top)
|
--timeline-stroke-position-even: var(--timeline-stroke-position-top)
|
||||||
var(--timeline-stroke-position-horizontal) auto auto;
|
var(--timeline-stroke-position-horizontal) auto auto;
|
||||||
--timeline-item-margin-odd: 0 0 0
|
--timeline-item-margin-odd: 0 0 0 calc(50% - var(--timeline-circle-size) / 2);
|
||||||
calc(50% - var(--timeline-circle-size) / 2);
|
--timeline-item-margin-even: 0 calc(50% - var(--timeline-circle-size) / 2) 0 0;
|
||||||
--timeline-item-margin-even: 0 calc(50% - var(--timeline-circle-size) / 2) 0
|
|
||||||
0;
|
|
||||||
--timeline-item-flex-order: 1;
|
--timeline-item-flex-order: 1;
|
||||||
--timeline-item-content-margin-odd: 0 0 0 1rem;
|
--timeline-item-content-margin-odd: 0 0 0 1rem;
|
||||||
--timeline-item-content-margin-even: 0 1rem 0 0;
|
--timeline-item-content-margin-even: 0 1rem 0 0;
|
||||||
|
@ -298,8 +283,6 @@
|
||||||
|
|
||||||
@media (hover: hover) and (min-width: 50em) {
|
@media (hover: hover) and (min-width: 50em) {
|
||||||
:root {
|
:root {
|
||||||
--navigation-width-expanded: calc(
|
--navigation-width-expanded: calc(var(--navigation-size) * 3.75 + env(safe-area-inset-left));
|
||||||
var(--navigation-size) * 3.75 + env(safe-area-inset-left)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
@import "@/assets/fonts/arvo/arvo";
|
@import '@/assets/fonts/arvo/arvo';
|
||||||
@import "@/assets/fonts/secular-one/secular-one";
|
@import '@/assets/fonts/secular-one/secular-one';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
@import "@/scss/base";
|
@import '@/scss/base';
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
font-family: var(--font-family-copy);
|
font-family: var(--font-family-copy);
|
||||||
|
@ -19,7 +19,9 @@ body {
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
color: var(--color-text);
|
color: var(--color-text);
|
||||||
background: var(--color-background-body);
|
background: var(--color-background-body);
|
||||||
transition: color 0.5s, background-color 0.5s;
|
transition:
|
||||||
|
color 0.5s,
|
||||||
|
background-color 0.5s;
|
||||||
line-height: var(--text-line-height);
|
line-height: var(--text-line-height);
|
||||||
|
|
||||||
text-rendering: optimizeLegibility;
|
text-rendering: optimizeLegibility;
|
||||||
|
@ -41,7 +43,7 @@ main {
|
||||||
&:after {
|
&:after {
|
||||||
display: block;
|
display: block;
|
||||||
|
|
||||||
content: "";
|
content: '';
|
||||||
position: sticky;
|
position: sticky;
|
||||||
inset: auto 0 var(--navigation-cutout-page-background) 0;
|
inset: auto 0 var(--navigation-cutout-page-background) 0;
|
||||||
|
|
||||||
|
@ -95,8 +97,7 @@ a {
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--color-link-text-hover);
|
color: var(--color-link-text-hover);
|
||||||
box-shadow: inset 0 calc(var(--link-inset-box-shadow) * -1) 0 0
|
box-shadow: inset 0 calc(var(--link-inset-box-shadow) * -1) 0 0 var(--color-link-text-underline);
|
||||||
var(--color-link-text-underline);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,60 +1,56 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import AttributionTable from "@/components/AttributionTable.vue";
|
import AttributionTable from '@/components/AttributionTable.vue'
|
||||||
|
|
||||||
import ViktorRefAlpha from "@/assets/viktor-ref-SFW-alpha.png?w=400&format=webp&quality=100&imagetools";
|
import ViktorRefAlpha from '@/assets/viktor-ref-SFW-alpha.png?w=400&format=webp&quality=100&imagetools'
|
||||||
import ViktorFront from "@/assets/viktor-front-SFW-alpha.png?w=400&format=webp&quality=100&imagetools";
|
import ViktorFront from '@/assets/viktor-front-SFW-alpha.png?w=400&format=webp&quality=100&imagetools'
|
||||||
|
|
||||||
const attributions = [
|
const attributions = [
|
||||||
{
|
{
|
||||||
artwork: ViktorRefAlpha,
|
artwork: ViktorRefAlpha,
|
||||||
artist: "sabertoofs",
|
artist: 'sabertoofs',
|
||||||
links: {
|
links: {
|
||||||
furaffinity: "https://www.furaffinity.net/user/sabertoofs",
|
furaffinity: 'https://www.furaffinity.net/user/sabertoofs',
|
||||||
twitter: "https://twitter.com/sabertoofs",
|
twitter: 'https://twitter.com/sabertoofs'
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
artwork: ViktorFront,
|
artwork: ViktorFront,
|
||||||
artist: "sabertoofs",
|
artist: 'sabertoofs',
|
||||||
links: {
|
links: {
|
||||||
furaffinity: "https://www.furaffinity.net/user/sabertoofs",
|
furaffinity: 'https://www.furaffinity.net/user/sabertoofs',
|
||||||
twitter: "https://twitter.com/sabertoofs",
|
twitter: 'https://twitter.com/sabertoofs'
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
];
|
]
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<section>
|
<section>
|
||||||
<h1>{{ $t(`${$route.meta.title}`) }}</h1>
|
<h1>{{ $t(`${$route.meta.title}`) }}</h1>
|
||||||
<h2>{{ $t("attributions.artwork.heading") }}</h2>
|
<h2>{{ $t('attributions.artwork.heading') }}</h2>
|
||||||
</section>
|
</section>
|
||||||
<AttributionTable :attributions="attributions" />
|
<AttributionTable :attributions="attributions" />
|
||||||
<section>
|
<section>
|
||||||
<h2>{{ $t("attributions.other.heading") }}</h2>
|
<h2>{{ $t('attributions.other.heading') }}</h2>
|
||||||
</section>
|
</section>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{{ $t("attributions.other.headings[0]") }}</th>
|
<th>{{ $t('attributions.other.headings[0]') }}</th>
|
||||||
<th>{{ $t("attributions.other.headings[1]") }}</th>
|
<th>{{ $t('attributions.other.headings[1]') }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $t("attributions.other.icons[0]") }}</td>
|
<td>{{ $t('attributions.other.icons[0]') }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a
|
<a href="https://fontawesome.com/license/free" target="_blank" rel="noopener noreferrer">
|
||||||
href="https://fontawesome.com/license/free"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
>
|
|
||||||
Font Awesome
|
Font Awesome
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $t("attributions.other.headingFont[0]") }}</td>
|
<td>{{ $t('attributions.other.headingFont[0]') }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a
|
<a
|
||||||
href="https://github.com/MichalSahar/Secular"
|
href="https://github.com/MichalSahar/Secular"
|
||||||
|
@ -63,18 +59,14 @@ const attributions = [
|
||||||
>
|
>
|
||||||
Secular One
|
Secular One
|
||||||
</a>
|
</a>
|
||||||
{{ $t("attributions.other.headingFont[1]") }}
|
{{ $t('attributions.other.headingFont[1]') }}
|
||||||
<a
|
<a href="https://github.com/MichalSahar" target="_blank" rel="noopener noreferrer">
|
||||||
href="https://github.com/MichalSahar"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
>
|
|
||||||
Michal Sahar
|
Michal Sahar
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $t("attributions.other.copyFont[0]") }}</td>
|
<td>{{ $t('attributions.other.copyFont[0]') }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a
|
<a
|
||||||
href="https://antonkoovit.com/typefaces/arvo"
|
href="https://antonkoovit.com/typefaces/arvo"
|
||||||
|
@ -83,33 +75,19 @@ const attributions = [
|
||||||
>
|
>
|
||||||
Arvo
|
Arvo
|
||||||
</a>
|
</a>
|
||||||
{{ $t("attributions.other.copyFont[1]") }}
|
{{ $t('attributions.other.copyFont[1]') }}
|
||||||
<a
|
<a href="https://antonkoovit.com/" target="_blank" rel="noopener noreferrer">
|
||||||
href="https://antonkoovit.com/"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
>
|
|
||||||
Anton Koovit
|
Anton Koovit
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $t("attributions.other.background[0]") }}</td>
|
<td>{{ $t('attributions.other.background[0]') }}</td>
|
||||||
<td>
|
<td>
|
||||||
{{ $t("attributions.other.background[1][0]") }}
|
{{ $t('attributions.other.background[1][0]') }}
|
||||||
<a
|
<a href="https://haikei.app/" target="_blank" rel="noopener noreferrer">Haikei</a>
|
||||||
href="https://haikei.app/"
|
{{ $t('attributions.other.background[1][1]') }}
|
||||||
target="_blank"
|
<a href="https://zcreativelabs.com/" target="_blank" rel="noopener noreferrer">
|
||||||
rel="noopener noreferrer"
|
|
||||||
>
|
|
||||||
Haikei
|
|
||||||
</a>
|
|
||||||
{{ $t("attributions.other.background[1][1]") }}
|
|
||||||
<a
|
|
||||||
href="https://zcreativelabs.com/"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
>
|
|
||||||
z creative labs
|
z creative labs
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
|
@ -117,5 +95,3 @@ const attributions = [
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss"></style>
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ import TruckIcon from '@/assets/icons/TruckIcon.vue'
|
||||||
import BoxesIcon from '@/assets/icons/BoxesIcon.vue'
|
import BoxesIcon from '@/assets/icons/BoxesIcon.vue'
|
||||||
|
|
||||||
interface Job {
|
interface Job {
|
||||||
title: string;
|
title: string
|
||||||
desc: string;
|
desc: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const jobIcons = [
|
const jobIcons = [
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue