feat: omg everything is here!

This commit is contained in:
dusk 2024-08-15 00:43:18 +03:00
parent b23d328937
commit eb7720b266
Signed by: dusk
SSH Key Fingerprint: SHA256:Abmvag+juovVufZTxyWY8KcVgrznxvBjQpJesv071Aw
42 changed files with 703 additions and 87 deletions

1
.npmrc
View File

@ -1 +1,2 @@
engine-strict=true
@jsr:registry=https://npm.jsr.io

BIN
bun.lockb

Binary file not shown.

View File

@ -38,6 +38,7 @@
},
"type": "module",
"dependencies": {
"@std/toml": "npm:@jsr/std__toml",
"rehype-autolink-headings": "^7.1.0",
"rehype-slug": "^6.0.0"
},

View File

@ -1,3 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

View File

@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<link rel="icon" href="%sveltekit.assets%/icons/gaze_site.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
%sveltekit.head%
</head>

View File

@ -0,0 +1,30 @@
<script lang="ts">
export let highlight: boolean = false;
export let name: string;
export let href: string;
export let iconUri: string;
</script>
<div
class="
p-0.5 pr-1.5 border-ralsei-white border-4
{highlight
? 'min-w-36 max-w-36 bg-gradient-to-l to-ralsei-pink-neon/30 from-ralsei-pink-regular/20 from-30% border-ridge motion-safe:animate-pulse hover:animate-none'
: 'border-double hover:border-solid motion-safe:hover:animate-bounce'}
"
>
<a
class="
flex gap-1 items-center justify-center
{highlight
? 'text-ralsei-pink-regular app-selected-route'
: 'text-ralsei-green-light hover:underline'}
"
title={name}
href="/{href}"
data-sveltekit-preload-data="hover"
>
<img class="max-w-4" style="image-rendering: pixelated;" src={iconUri} alt={name} />
<div class="font-monospace text-sm/3 overflow-hidden text-ellipsis text-nowrap">{name}</div>
</a>
</div>

View File

@ -0,0 +1,32 @@
<script lang="ts">
export let title: string;
export let iconUri: string = '';
</script>
<div
class="
flex flex-col
max-w-screen-md xl:max-w-screen-lg 2xl:max-w-screen-xl min-w-[30ch] lg:min-w-[40ch] w-fit h-fit
border-ralsei-white border-ridge border-8 border-t-[12px]
bg-ralsei-black
"
>
<div
class="
flex
p-1 border-ralsei-white border-8
bg-gradient-to-l from-ralsei-pink-neon to-75%
"
style="border-style: hidden hidden ridge hidden;"
>
<h1 class="font-monospace text-xl text-ralsei-pink-regular grow justify-self-start self-center">
{title}
</h1>
{#if iconUri !== ''}
<img class="justify-self-end self-center max-h-7" style="image-rendering: pixelated;" src={iconUri} alt={iconUri} />
{/if}
</div>
<div class="p-2 bg-gradient-to-tl to-ralsei-pink-neon/15 from-ralsei-pink-regular/20">
<slot />
</div>
</div>

View File

@ -16,7 +16,7 @@ const months = [
const convertDate = (published: string) => {
const date = published.substring(0, 10);
const [year, month, day] = date.split('-');
return `${day}-${months[parseInt(month) - 1]}-${year}`;
return `${day} ${months[parseInt(month) - 1]} ${year}`;
};
export default convertDate;

11
src/lib/getTitle.ts Normal file
View File

@ -0,0 +1,11 @@
const getTitle = (path: string) => {
let sl = path.split('/')
sl = sl.splice(1)
if (sl.length > 1) {
sl[0] = sl[0][0]
}
const newPath = sl.join('/')
return '[gazesystems /' + newPath + ']$'
}
export default getTitle;

View File

@ -1,5 +1,83 @@
<script lang="ts">
import "../app.css";
import getTitle from '$lib/getTitle';
import NavButton from '../components/navButton.svelte';
import '../styles/app.css';
export let data;
interface MenuItem {
href: string;
name: string;
iconUri: string;
}
let menuItems: MenuItem[] = [
{ href: '', name: 'home', iconUri: '/icons/home.png' },
{ href: 'entries', name: 'entries', iconUri: '/icons/entries.png' },
{ href: 'about', name: 'about', iconUri: '/icons/about.png' }
];
const routeComponents = data.route.split('/');
const doAddPostItem = routeComponents.length > 2 && routeComponents[1] === 'entries';
const isRoute = (_route: string) => {
if (doAddPostItem) {
if (_route === 'entries') {
return false;
} else if (_route.startsWith('entries/')) {
return true;
}
}
return _route === routeComponents[routeComponents.length - 1];
};
if (doAddPostItem) {
menuItems.splice(2, 0, {
href: data.route.slice(1),
name: routeComponents[2] + 'aaaaaaaa.md',
iconUri: '/favicon.png'
});
}
const title = getTitle(data.route);
</script>
<slot />
<svelte:head>
<title>{title}</title>
<meta property="og:title" content={title} />
<meta property="og:site_name" content="gaze.systems"/>
<meta property="og:url" content="https://gaze.systems/"/>
<meta property="og:type" content="website" />
<meta property="og:image" content="https://gaze.systems/icons/gaze_website.png" />
</svelte:head>
<div
class="
app-grid-background motion-safe:app-grid-background-anim
fixed -z-10 w-full h-full top-0 left-0
"
/>
<div
class="
app-grid-background-second-layer motion-safe:app-grid-background-second-layer-anim
fixed -z-20 w-full h-full top-0 left-0
"
/>
<div class="lg:mx-[4vw] 2xl:mx-[8vw] lg:my-[4vh]"><slot /></div>
<nav class="w-full z-10 fixed bottom-0 bg-ralsei-black">
<div
class="
max-w-full max-h-fit p-1 overflow-auto
grid grid-flow-col grid-rows-1 gap-2 justify-start
border-ralsei-white border-8
bg-gradient-to-r to-ralsei-pink-neon/30 from-ralsei-pink-regular/20 from-30%
"
style="border-style: ridge hidden hidden hidden;"
>
{#each menuItems as item}
{@const highlight = isRoute(item.href)}
<NavButton {highlight} {...item} />
{/each}
</div>
</nav>

View File

@ -1,2 +1,9 @@
import { dev } from '$app/environment';
export const csr = dev;
export const ssr = true;
export const prerender = true;
export async function load({ url }) {
return { route: url.pathname }
}

View File

@ -1 +1,63 @@
<a href="/posts" data-sveltekit-preload-data="hover">posts</a>
<script>
import Window from '../components/window.svelte';
</script>
<div class="flex flex-none gap-y-4 lg:gap-y-0 flex-wrap md:flex-nowrap">
<Window title="readme?" iconUri='/icons/question.png'>
<div class="prose prose-ralsei prose-img:m-0 leading-6">
<p>hi there <img class="inline h-6" src="/wavey.gif" alt="wavey" title="hi :33" /></p>
<p>
i'm dusk! and this is my personal spot where i plan to put everything that i do on (<i>if i don't forget to...</i>)
</p>
<p>not much else to say, hopefully will add more text here one day :></p>
<p>website very much in progress still !!!</p>
</div>
</Window>
<div class="grow" />
<Window title="contacts!" iconUri='/icons/contact.png'>
<div class="prose prose-ralsei leading-6">
<ul>
<li>discord: yusdacra</li>
<li>
e-mail:
<a href="mailto:y.bera003.06@pm.me">y.bera003.06@pm.me</a>
</li>
</ul>
<h3>development</h3>
<ul>
<li>
github:
<a href="https://github.com/yusdacra">@yusdacra</a>
</li>
<li>
gitlab:
<a href="https://gitlab.com/yusdacra">@yusdacra</a>
</li>
<li>
my gitea:
<a href="https://git.gaze.systems/dusk">@dusk</a>
</li>
</ul>
<h3>socials</h3>
<ul>
<li>
bluesky:
<a href="https://bsky.app/profile/gaze.systems">@gaze.systems</a>
</li>
<li>
misskey.art:
<a href="https://misskey.art/@yusdacra">@yusdacra</a>
</li>
</ul>
</div>
</Window>
</div>
<div class="hidden motion-reduce:md:block absolute max-w-[40ch] bottom-[10vh] right-[8vw]">
<Window title=":(" iconUri='/icons/warning.png'>
<div class="prose prose-ralsei leading-6">
<p>you have <code>prefers-reduced-motion</code> enabled so i disabled (most of) the animations!</p>
<p class="text-xs italic">they looked nice i think....</p>
</div>
</Window>
</div>

View File

@ -0,0 +1,9 @@
+++
title = "about me"
date = "2024-08-14"
layout = "blogpost"
+++
idk im too lazy to write about myself, bother me if you really want me to
<p class="text-xs italic">(i will do this later)</p>

View File

@ -0,0 +1,36 @@
<script lang="ts">
import Window from '../../components/window.svelte';
import type { PostData } from './+page.ts';
export let data;
let posts: PostData[] = data.posts as PostData[];
</script>
<div class="flex flex-wrap gap-y-4 lg:mx-3 lg:my-4">
{#each posts as post, index}
{@const x = index % 2 === 0 ? 'lg:ml-16' : 'lg:ml-36'}
{@const y = index % 2 === 0 ? 'lg:mt-6' : 'lg:mt-10'}
<div class="{x} {y}">
<Window title={post.metadata.title} iconUri='/icons/entry.png'>
<a
href="/entries/{post.path}"
title="cd /entries/{post.path}"
data-sveltekit-preload-data="hover"
>
<div class="flex flex-col gap-2">
<p>
--- on:
<time datetime="2024-08-11">{post.published}</time>
</p>
<p class="max-w-80 text-wrap">
--- excerpt:
{post.metadata.excerpt}
</p>
<strong class="place-self-end text-ralsei-green-light"> read more... </strong>
</div>
</a>
</Window>
</div>
{/each}
</div>

View File

@ -0,0 +1,34 @@
import convertDate from "$lib/convertDate";
export interface PostData {
path: string,
published: string,
metadata: Record<string, string>,
}
export async function load({ params }) {
const allPostFiles: Record<string, any> = import.meta.glob('./*/+page.md', {eager: true});
let allPosts: PostData[] = Object.entries(allPostFiles).map(([path, post]) => {
const postPath = path.slice(2, -8);
return {
metadata: post.metadata,
path: postPath,
published: convertDate(post.metadata.date)
};
});
allPosts = allPosts.map((post) => {
if (!("excerpt" in post.metadata)) {
post.metadata.excerpt = ""
}
return post;
});
allPosts = allPosts.toSorted((post, opost) => {
const date = new Date(post.metadata.date);
const odate = new Date(opost.metadata.date);
return odate.getTime() - date.getTime()
});
if (!allPosts.length) {
return { status: 404 };
}
return { posts: allPosts };
}

View File

@ -0,0 +1,15 @@
<script lang="ts">
import Window from "../../components/window.svelte";
import "../../styles/app.css";
export let title;
export let date;
</script>
<div class="lg:mb-[8vh]">
<Window {title} iconUri='/icons/entry.png'>
<div class="prose prose-ralsei max-w-[80ch]">
<slot/>
</div>
</Window>
</div>

View File

@ -0,0 +1,8 @@
+++
title = "hello universe"
date = "2024-08-08"
layout = "blogpost"
excerpt = "meow"
+++
hello everyone :3

View File

@ -0,0 +1,17 @@
+++
title = "test"
date = "2024-08-13"
layout = "blogpost"
excerpt = "this is a test document. it is used for testing stuff."
+++
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed iaculis ligula sed odio fermentum, ac aliquet diam sagittis. Phasellus vel elementum arcu. Fusce id ante lacus. Nullam malesuada, enim nec maximus mollis, tortor metus dapibus mi, id tincidunt massa massa sed velit. Curabitur cursus, lorem rutrum laoreet posuere, tellus eros faucibus odio, non ullamcorper magna lectus non justo. Fusce pulvinar sagittis nisl et pretium. Proin quis pellentesque risus.
Pellentesque massa purus, ornare aliquam velit et, hendrerit lacinia felis. Fusce nec felis maximus, egestas lorem et, vehicula libero. Donec gravida sodales porta. Nunc ac urna vestibulum, finibus erat vitae, euismod nisi. Morbi auctor pretium diam ut pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus pulvinar orci vitae dolor sodales placerat. Integer tristique condimentum massa, non euismod nisi sodales eu.
Integer consectetur ligula quis mauris porta sodales. Morbi tincidunt elementum tortor ut auctor. Vestibulum vehicula sit amet augue sed bibendum. Cras sit amet elit ac tortor malesuada condimentum. Nunc ac mi sed lectus mollis tristique sit amet eu nunc. Nunc dapibus dignissim dolor. Nam sed quam ex. Cras vel pharetra lectus, a interdum ante. Sed condimentum efficitur auctor. Vestibulum dignissim erat in rutrum sodales. Mauris ultrices nibh eget luctus lobortis.
Etiam sollicitudin suscipit odio, sed malesuada ipsum luctus id. Phasellus commodo, turpis non ornare viverra, arcu tortor tincidunt orci, at pellentesque justo est ut dui. Aliquam erat volutpat. Nulla gravida risus eget nunc commodo hendrerit. Aenean faucibus dui blandit ipsum gravida, non elementum orci fermentum. Morbi consequat elementum nulla, a dictum eros imperdiet sit amet. Sed ac vulputate ante, nec lobortis erat. Aliquam sodales nisi magna, ut molestie orci varius tincidunt. Suspendisse tempor orci quis erat accumsan, nec eleifend tellus interdum. Phasellus nec massa mi. Donec mattis mi imperdiet nisl varius, id vehicula felis tempor. Aliquam in tincidunt erat. Proin nec ornare enim, id lacinia urna. Morbi dolor lorem, porttitor quis orci ac, facilisis fringilla neque. Nulla tempor, dui sit amet lacinia faucibus, felis erat posuere nisi, ac condimentum lorem ex vel elit.
Pellentesque vitae massa quis purus sodales consectetur. Aliquam ex leo, efficitur vitae nulla sed, pretium luctus ante. Proin et lacus dictum, bibendum leo at, rhoncus sem. Suspendisse non tellus odio. In pulvinar quam sed arcu ornare volutpat. Cras commodo a enim id accumsan. Etiam nec augue ullamcorper, consequat tellus varius, lacinia urna. Aenean rutrum a lorem quis dapibus. Curabitur vitae ipsum faucibus risus elementum condimentum. Proin pretium vulputate leo commodo molestie. Proin ultricies ac nibh vel molestie. Vestibulum vitae lorem lobortis, ultrices odio bibendum, lacinia risus.

View File

@ -1,21 +0,0 @@
<script lang="ts">
import type { PostData } from './+page.ts';
export let data;
let posts: PostData[] = data.posts as PostData[];
</script>
<div>
{#each posts as post}
<div>
<a href="/posts/{post.path}" data-sveltekit-preload-data="hover">
<p>{post.metadata.title}</p>
<p>{post.metadata.excerpt}</p>
</a>
<div>
<time datetime="2020-03-16">{post.published}</time>
</div>
</div>
{/each}
</div>

View File

@ -1,20 +0,0 @@
import convertDate from "$lib/convertDate";
export interface PostData {
path: string,
published: string,
metadata: Record<string, string>,
}
export async function load({ params }) {
const allPostFiles: Record<string, any> = import.meta.glob('./*/+page.md', {eager: true});
const allPosts: PostData[] = Object.entries(allPostFiles).map(([path, post]) => {
const postPath = path.slice(2, -8);
return { metadata: post.metadata, path: postPath, published: convertDate(post.metadata.date) };
});
if (!allPosts.length) {
return { status: 404 };
}
//console.log(allPosts);
return { posts: allPosts };
}

View File

@ -1,14 +0,0 @@
<script lang="ts">
import "../../app.css";
export let title;
export let author;
export let date;
</script>
<div class="prose lg:prose-lg">
<h1 class="font-mono">{ title }</h1>
<ul>on: { date }</ul>
<ul>by: { author }</ul>
<slot/>
</div>

View File

@ -1,17 +0,0 @@
---
title: Hello World
author: Jeff
date: 2022-05-27
layout: blogpost
excerpt: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi eget massa sit amet arcu varius lacinia nec quis lacus.
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi eget massa sit amet arcu varius lacinia nec quis lacus. Proin auctor lectus a volutpat porta. Nullam eget ipsum convallis, elementum orci sodales, blandit velit. In imperdiet, ligula sed ultricies pharetra, metus mi consequat dui, vitae luctus dolor ligula eu nunc. Fusce consequat mauris ac egestas iaculis. Quisque pharetra et ante maximus convallis. Nulla sollicitudin velit molestie mauris dignissim, at hendrerit diam fringilla. Donec mollis eget ex non iaculis. In a vehicula nisl. Donec dapibus orci in enim posuere, non rhoncus risus ultrices. Pellentesque elementum metus ipsum, ut scelerisque mauris ultrices vel.
Aliquam ullamcorper est vehicula, suscipit nulla pellentesque, convallis odio. Praesent eget elit eget magna fringilla pharetra tempor quis magna. Proin et est vestibulum neque rhoncus mattis non vel lacus. Proin vulputate risus vel dignissim vestibulum. Quisque id sollicitudin neque, sed sagittis urna. Vestibulum vehicula metus sed eros venenatis, sit amet facilisis nunc porta. Nam pharetra luctus sapien, ut venenatis nibh tincidunt mollis. Phasellus efficitur, felis vitae mattis cursus, sapien diam vulputate dui, sit amet pulvinar ante ipsum non urna.
Fusce est nulla, efficitur vitae turpis eget, pretium rutrum turpis. Fusce at lectus eros. Phasellus convallis condimentum dolor ac rutrum. Integer commodo augue et dui efficitur tincidunt. Nam scelerisque egestas quam, vitae ultrices turpis tincidunt rhoncus. Duis rutrum placerat erat. Ut ac tincidunt elit. In laoreet dictum mauris nec posuere. Curabitur tempus, dolor malesuada ultrices feugiat, ipsum eros faucibus tellus, eu ultricies nunc est sed dolor. Suspendisse nisi eros, vehicula vitae iaculis sit amet, aliquet sit amet leo. Sed euismod urna at eros posuere laoreet. Curabitur in sodales lorem. Nulla rutrum aliquam felis ac tempor.
Ut pretium vitae elit ac facilisis. Aliquam nisi tortor, feugiat at lacus sed, condimentum egestas urna. Vestibulum hendrerit augue non urna volutpat, et fermentum tortor pellentesque. Aenean eget pharetra leo. Vestibulum ut laoreet dui. Phasellus nec nunc imperdiet, mollis urna eget, interdum lacus. Nulla ac neque pulvinar ex vestibulum venenatis at sed mi. Aliquam faucibus risus eget dolor porttitor interdum. Phasellus rutrum augue ex, vel tempus velit sollicitudin vitae. Pellentesque libero sapien, ullamcorper nec elementum nec, pharetra sed nisl. Nullam egestas arcu et ex vulputate, pretium vestibulum odio convallis. Nam auctor risus nec fermentum ultricies.
Donec porttitor quis ipsum ut imperdiet. Fusce ac pretium felis, sit amet pharetra orci. Donec vitae quam ac tellus pellentesque fringilla. Curabitur placerat quam a leo imperdiet tincidunt. Nunc porta pulvinar orci sit amet varius. Suspendisse dapibus ipsum nec magna ultricies gravida. Maecenas varius justo ac sem rhoncus lobortis. Integer eget cursus diam. Vestibulum sollicitudin enim at metus scelerisque blandit. In sit amet pulvinar nunc. Sed sit amet rutrum ex, efficitur imperdiet nunc.

136
src/styles/app.css Normal file
View File

@ -0,0 +1,136 @@
@import './prism-synthwave84.css';
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
@apply font-sans-serif bg-ralsei-black text-ralsei-white;
@apply prose-code:font-monospace prose-headings:font-monospace;
cursor: url('/icons/gaze_closed.png'), default;
}
.prose h1::before {
content: '> ';
}
.prose h2::before {
content: '>> ';
}
.prose h3::before {
content: '>>> ';
}
.prose h4::before {
content: '>>>> ';
}
.prose a:hover {
@apply animate-pulse-fast;
}
h1,h2,h3,h4,h5,h6 {
text-shadow: 0 0 3px theme(colors.ralsei.black), 0 0 6px theme(colors.ralsei.pink.neon), 0 0 10px #fff3;
}
li,p {
text-shadow: 0 0 1px theme(colors.ralsei.black), 0 0 5px theme(colors.ralsei.white);
}
li::marker {
text-shadow: 0 0 4px theme(colors.ralsei.pink.regular), 0 0 6px #fff9;
}
code {
text-shadow: 0 0 4px theme(colors.ralsei.pink.regular);
}
a {
text-shadow: 0 0 2px theme(colors.ralsei.black), 0 0 5px theme(colors.ralsei.green.light);
cursor: url('/icons/gaze.png'), pointer;
}
@font-face {
font-family: 'Comic Shanns';
font-display: swap;
src: url('/fonts/ComicMono-Condensed.woff2') format('woff2');
}
@font-face {
font-family: 'Comic Sans';
font-style: normal;
font-display: swap;
src: url('/fonts/comic.woff2') format('woff2');
}
@font-face {
font-family: 'Comic Sans';
font-style: normal;
font-weight: bold;
font-display: swap;
src: url('/fonts/comicbd.woff2') format('woff2');
}
@font-face {
font-family: 'Comic Sans';
font-style: italic;
font-display: swap;
src: url('/fonts/comici.woff2') format('woff2');
}
}
@layer utilities {
.border-groove {
border-style: groove;
}
.border-ridge {
border-style: ridge;
}
.app-grid-background-anim {
animation: 4s linear app-grid-move-first-layer infinite;
}
.app-grid-background-second-layer-anim {
animation: 12s linear app-grid-move-second-layer infinite;
}
@keyframes app-grid-move-first-layer {
0% {
background-position: 0px 0px;
}
100% {
background-position: 126px 84px;
}
}
@keyframes app-grid-move-second-layer {
0% {
background-position: 96px 120px;
}
100% {
background-position: 0px 0px;
}
}
}
a.app-selected-route {
text-shadow: 0 0 2px theme(colors.ralsei.black), 0 0 5px theme(colors.ralsei.pink.regular);
}
.app-grid-background {
background-image:
linear-gradient(theme(colors.ralsei.green.light / 0.4), transparent 2px),
linear-gradient(to right, theme(colors.ralsei.green.light / 0.4), transparent 2px);
background-size: 100% 42px, 42px 100%;
}
.app-grid-background-second-layer {
background-image:
linear-gradient(theme(colors.ralsei.pink.neon / 0.4), transparent 1px),
linear-gradient(to right, theme(colors.ralsei.pink.neon / 0.4), transparent 1px);
background-size: 100% 24px, 24px 100%;
}

View File

@ -0,0 +1,140 @@
/*
* Synthwave '84 Theme originally by Robb Owen [@Robb0wen] for Visual Studio Code
* Demo: https://marc.dev/demo/prism-synthwave84
*
* Ported for PrismJS by Marc Backes [@themarcba]
*/
code[class*="language-"],
pre[class*="language-"] {
color: theme(colors.ralsei.pink.neon);
text-shadow: 0 0 2px theme(colors.ralsei.black), 0 0 5px #ff3eb733, 0 0 10px #fff3;
@apply bg-ralsei-green-dark;
@apply font-monospace;
font-size: 1rem;
line-height: 1.4rem;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
/* :not(pre) > code[class*="language-"],
pre[class*="language-"] {
background-color: transparent !important;
background-image: linear-gradient(to bottom, #2a2139 75%, #34294f);
} */
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.block-comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: #8e8e8e;
}
.token.punctuation {
color: #ccc;
}
.token.tag,
.token.attr-name,
.token.namespace,
.token.number,
.token.unit,
.token.hexcode,
.token.deleted {
color: #e2777a;
}
.token.property,
.token.selector {
color: #72f1b8;
text-shadow: 0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475;
}
.token.function-name {
color: #6196cc;
}
.token.boolean,
.token.selector .token.id,
.token.function {
color: #fdfdfd;
text-shadow: 0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975;
}
.token.class-name {
color: #fff5f6;
text-shadow: 0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75;
}
.token.constant,
.token.symbol {
color: #f92aad;
text-shadow: 0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3;
}
.token.important,
.token.atrule,
.token.keyword,
.token.selector .token.class,
.token.builtin {
color: #f4eee4;
text-shadow: 0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575;
}
.token.string,
.token.char,
.token.attr-value,
.token.regex,
.token.variable {
color: #f87c32;
}
.token.operator,
.token.entity,
.token.url {
color: #67cdcc;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
.token.inserted {
color: green;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

BIN
static/fonts/comic.woff2 Normal file

Binary file not shown.

BIN
static/fonts/comicbd.woff2 Normal file

Binary file not shown.

BIN
static/fonts/comici.woff2 Normal file

Binary file not shown.

BIN
static/icons/about.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 B

BIN
static/icons/contact.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

BIN
static/icons/entries.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

BIN
static/icons/entry.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

BIN
static/icons/gaze.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
static/icons/gaze_site.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
static/icons/home.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

BIN
static/icons/question.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

BIN
static/icons/warning.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

BIN
static/wavey.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1,10 +1,12 @@
import adapter from "@sveltejs/adapter-static";
import adapter from "svelte-adapter-bun";
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
import { mdsvex } from 'mdsvex'
import rehypeAutolinkHeadings from 'rehype-autolink-headings'
import rehypeSlug from 'rehype-slug'
import * as toml from "@std/toml";
/** @type {import('@sveltejs/kit').Config} */
const config = {
extensions: ['.svelte', '.md', '.svx'],
@ -13,19 +15,44 @@ const config = {
vitePreprocess(),
mdsvex({
extensions: ['.md', '.svx'],
frontmatter: {
type: "toml",
marker: "+",
parse(frontmatter, messages) {
try {
return toml.parse(frontmatter);
} catch (e) {
messages.push(
"Parsing error on line " +
e.line +
", column " +
e.column +
": " +
e.message
);
}
},
},
rehypePlugins: [
rehypeSlug,
rehypeAutolinkHeadings,
],
smartypants: { dashes: 'oldschool' },
smartypants: {
dashes: 'oldschool',
quotes: true,
ellipses: true,
backticks: false,
},
layout: {
_: './src/routes/+layout.svelte',
blogpost: './src/routes/posts/_layout.svelte',
blogpost: './src/routes/entries/_layout.svelte',
},
}),
],
kit: {
prerender: {
handleHttpError: 'warn',
},
adapter: adapter({
precompress: true,
}),

View File

@ -1,8 +1,55 @@
const colors = require('tailwindcss/colors')
/** @type {import('tailwindcss').Config} */
export default {
content: ['./src/**/*.{html,js,svelte,ts,md}'],
theme: {
extend: {},
extend: {
typography: ({ theme }) => ({
ralsei: {
css: {
'--tw-prose-body': theme('colors.ralsei.white'),
'--tw-prose-headings': theme('colors.ralsei.pink.neon'),
'--tw-prose-lead': theme('colors.ralsei.white'),
'--tw-prose-links': theme('colors.ralsei.green.light'),
'--tw-prose-bold': theme('colors.ralsei.white'),
'--tw-prose-counters': theme('colors.ralsei.pink.regular'),
'--tw-prose-bullets': theme('colors.ralsei.pink.regular'),
'--tw-prose-hr': theme('colors.ralsei.white'),
'--tw-prose-quotes': theme('colors.ralsei.white'),
'--tw-prose-quote-borders': theme('colors.ralsei.white'),
'--tw-prose-captions': theme('colors.ralsei.white'),
'--tw-prose-code': theme('colors.ralsei.pink.regular'),
'--tw-prose-pre-code': theme('colors.ralsei.white'),
'--tw-prose-pre-bg': theme('colors.ralsei.green.dark'),
'--tw-prose-th-borders': theme('colors.ralsei.white'),
'--tw-prose-td-borders': theme('colors.ralsei.white'),
},
},
}),
animation: {
'bounce-slow' : 'bounce 3s infinite',
'pulse-fast' : 'pulse 1s cubic-bezier(0.4, 0, 0.6, 1) infinite',
},
colors: {
ralsei: {
pink: {
regular: '#fe96e0',
neon: '#ff3eb7',
},
white: '#fff9fe',
black: '#000801',
green: {
light: '#4dcc8e',
dark: '#162d26',
}
}
}
},
fontFamily: {
'sans-serif': ['"Comic Sans", sans-serif'],
monospace: ['"Comic Shanns", monospace'],
}
},
plugins: [
require('@tailwindcss/typography')