Compare commits
2 Commits
87bb15eecf
...
b738eea749
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b738eea749 | ||
|
|
ef482434f9 |
@ -9,5 +9,9 @@ ___
|
||||
|
||||
## Site
|
||||
|
||||
|
||||
https://neocities.org
|
||||
https://lazer-bunny.neocities.org/
|
||||
https://faeraphim.net/main/index.htm
|
||||
https://lilithdev.neocities.org/
|
||||
<a href="https://july.lol"><img src="https://july.lol/img/lonelyjulybutton.gif" alt="july.lol"></a>
|
||||
___
|
||||
|
||||
BIN
sleepeesoftware.fr/assets/Binary.gif
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
sleepeesoftware.fr/assets/Boykisser.gif
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
sleepeesoftware.fr/assets/MINECRSAFT.gif
Normal file
|
After Width: | Height: | Size: 145 KiB |
BIN
sleepeesoftware.fr/assets/NEZUWUstarterpack.jpg
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
sleepeesoftware.fr/assets/Nezuwu.jpg
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
sleepeesoftware.fr/assets/SexyBear.jpg
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
sleepeesoftware.fr/assets/femboylober.gif
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
sleepeesoftware.fr/assets/minecrafcome.gif
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
sleepeesoftware.fr/assets/nyan.gif
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
sleepeesoftware.fr/assets/pantera.gif
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
sleepeesoftware.fr/assets/retrogame.gif
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
sleepeesoftware.fr/assets/steam.gif
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
sleepeesoftware.fr/assets/uwu.gif
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
sleepeesoftware.fr/assets/warning.gif
Normal file
|
After Width: | Height: | Size: 26 KiB |
@ -1,154 +0,0 @@
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Orbitron', sans-serif;
|
||||
color: var(--text-color);
|
||||
background: var(--background-color);
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
body::before {
|
||||
content: "";
|
||||
position: fixed;
|
||||
top: 0; left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
background: url('/assets/RpdC.gif') repeat;
|
||||
opacity: 0.05;
|
||||
mix-blend-mode: screen;
|
||||
}
|
||||
|
||||
body::after {
|
||||
content: "";
|
||||
position: fixed;
|
||||
top: 0; left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
pointer-events: none;
|
||||
background: repeating-linear-gradient(
|
||||
0deg,
|
||||
--scanline-color 0px,
|
||||
--scanline-color 1px,
|
||||
transparent 1px,
|
||||
transparent 4px
|
||||
);
|
||||
animation: scanlines 0.1s linear infinite;
|
||||
}
|
||||
|
||||
main section h2 {
|
||||
color: var(--terminal-border);
|
||||
text-shadow: 0 0 5px var(--terminal-border);
|
||||
margin-top: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h3 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.foreground-container {
|
||||
max-width: 960px;
|
||||
min-height: 720px;
|
||||
margin: 0 auto;
|
||||
background-color: rgba(0, 0, 0, 0.85);
|
||||
box-shadow: 0 0 20px var(--secondary-color);
|
||||
padding: 2rem;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
border-radius: 2% / 1.5%;
|
||||
box-shadow: 0 0 40px var(--glow-color), inset 0 0 20px rgba(0, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 1rem 2rem;
|
||||
background: rgba(0, 0, 0, 0.8);
|
||||
border-bottom: 2px solid var(--secondary-color);
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 2rem;
|
||||
color: var(--secondary-color);
|
||||
text-shadow: 0 0 5px var(--secondary-color);
|
||||
}
|
||||
|
||||
nav ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
nav ul li a {
|
||||
text-decoration: none;
|
||||
color: var(--primary-color);
|
||||
padding: 0.5rem 1rem;
|
||||
border: 1px solid var(--primary-color);
|
||||
border-radius: 4px;
|
||||
text-shadow: 0 0 3px var(--primary-color);
|
||||
}
|
||||
|
||||
nav ul li a:hover {
|
||||
background: var(--primary-color);
|
||||
color: var(--background-color);
|
||||
}
|
||||
|
||||
.footer-container {
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
background-color: rgba(0, 0, 0, 0.85);
|
||||
box-shadow: 0 0 20px var(--secondary-color);
|
||||
padding: 2rem;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
border-radius: 2% / 1.5%;
|
||||
box-shadow: 0 0 40px var(--glow-color), inset 0 0 20px rgba(0, 255, 255, 0.1);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
ul a {
|
||||
text-decoration: none;
|
||||
padding: 0.5rem 1rem;
|
||||
border: 1px solid var(--primary-color);
|
||||
border-radius: 2px;
|
||||
color: var(--primary-color);
|
||||
text-shadow: 0 0 3px var(--primary-color);
|
||||
}
|
||||
|
||||
ul a:hover {
|
||||
background: var(--primary-color);
|
||||
color: var(--background-color);
|
||||
}
|
||||
|
||||
ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
#repo-list {
|
||||
display: flex;
|
||||
gap: 1em;
|
||||
flex-direction: column;
|
||||
flex-wrap: nowrap;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
#docs-list {
|
||||
display: flex;
|
||||
gap: 1em;
|
||||
flex-direction: column;
|
||||
flex-wrap: nowrap;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
footer a {
|
||||
text-decoration: none;
|
||||
color: var(--primary-color);
|
||||
text-shadow: 0 0 3px var(--primary-color);
|
||||
}
|
||||
@ -1,103 +0,0 @@
|
||||
:root {
|
||||
--primary-color: #00ffff;
|
||||
--secondary-color: #ff00ff;
|
||||
--background-color: #0d0d0d;
|
||||
--text-color: #f0f0f0;
|
||||
--overlay-background: rgba(0, 0, 0, 0.85);
|
||||
--button-background: #ff00ff;
|
||||
--button-hover-background: #00ffff;
|
||||
--scanline-color: rgba(255, 255, 255, 0.05);
|
||||
--glow-color: rgba(0, 255, 255, 0.3);
|
||||
--terminal-background: rgba(0, 0, 0, 0.9);
|
||||
--terminal-border: #ff00ff;
|
||||
--border-radius: 1.5%;
|
||||
}
|
||||
|
||||
/*
|
||||
effect
|
||||
*/
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
|
||||
@keyframes scanlines {
|
||||
0% { transform: translateY(0); }
|
||||
50% { transform: translateY(-2px); }
|
||||
100% { transform: translateY(0); }
|
||||
}
|
||||
|
||||
@keyframes vhs-static {
|
||||
0% { transform: translate(0, 0); }
|
||||
25% { transform: translate(-1px, 1px); }
|
||||
50% { transform: translate(1px, -0.5px); }
|
||||
75% { transform: translate(-0.5px, 0.5px); }
|
||||
100% { transform: translate(0.5px, -1px); }
|
||||
}
|
||||
|
||||
@keyframes flicker {
|
||||
0%, 100% { opacity: 0.8; }
|
||||
50% { opacity: 1; }
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.75; }
|
||||
}
|
||||
|
||||
|
||||
@keyframes rgb-split {
|
||||
0%, 100% {
|
||||
transform: translate(0px, 0px);
|
||||
}
|
||||
50% {
|
||||
transform: translate(-0.5px, 0.5px);
|
||||
}
|
||||
}
|
||||
|
||||
.fade-in {
|
||||
animation: fadeIn 0.5s ease-out forwards;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.crt-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
mix-blend-mode: screen;
|
||||
animation: flicker 0.5s infinite;
|
||||
border-radius: var(--border-radius);
|
||||
box-shadow: inset 0 0 40px var(--glow-color);
|
||||
}
|
||||
|
||||
.grid-bg {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: repeating-linear-gradient(
|
||||
to right,
|
||||
rgba(0, 255, 255, 0.1) 0px,
|
||||
rgba(0, 255, 255, 0.1) 1px,
|
||||
transparent 1px,
|
||||
transparent 40px
|
||||
), repeating-linear-gradient(
|
||||
to bottom,
|
||||
rgba(0, 255, 255, 0.1) 0px,
|
||||
rgba(0, 255, 255, 0.1) 1px,
|
||||
transparent 1px,
|
||||
transparent 40px
|
||||
);
|
||||
background-color: var(--background-color);
|
||||
z-index: -4;
|
||||
}
|
||||
|
||||
@ -1,60 +0,0 @@
|
||||
#loading-screen {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgb(0, 0, 0);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 9999;
|
||||
cursor: pointer;
|
||||
pointer-events: all; /* Ensure the user can click on the loading screen */
|
||||
z-index: 9999;
|
||||
mix-blend-mode: screen;
|
||||
box-shadow: inset 0 0 20px rgba(255, 255, 255, 0.15);
|
||||
animation: flicker 3.0s infinite;
|
||||
}
|
||||
|
||||
#loading-screen::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('/assets/RpdC.gif') repeat;
|
||||
opacity: 0.05;
|
||||
mix-blend-mode: screen;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
#loading-screen::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: repeating-linear-gradient(
|
||||
0deg,
|
||||
rgba(255, 255, 255, 0.05) 0px,
|
||||
rgba(255, 255, 255, 0.05) 1px,
|
||||
transparent 1px,
|
||||
transparent 4px
|
||||
);
|
||||
animation: scanlines 0.1s linear infinite;
|
||||
z-index: -2;
|
||||
}
|
||||
|
||||
.loading-text {
|
||||
color: var(--primary-color);
|
||||
font-family: 'Orbitron', sans-serif;
|
||||
font-size: 2rem;
|
||||
text-align: center;
|
||||
text-shadow: 0 0 15px var(--primary-color), 0 0 30px var(--primary-color);
|
||||
animation: pulse 1.5s infinite;
|
||||
z-index: 10000;
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -1,124 +0,0 @@
|
||||
body {
|
||||
--section-gap: 4rem;
|
||||
margin: 0;
|
||||
font-family: 'Iosevka SS14', monospace;
|
||||
background-color: var(--background-color);
|
||||
color: var(--text-color);
|
||||
transition: background 0.3s, color 0.3s;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
header {
|
||||
background: #000;
|
||||
padding: 1rem;
|
||||
color: var(--text-color);
|
||||
text-align: center;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
z-index: 10;
|
||||
box-shadow: 0 0 10px #0008;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
color: var(--secondary-color);
|
||||
}
|
||||
|
||||
header h1 {
|
||||
margin: 0;
|
||||
font-size: 1.5rem;
|
||||
color: var(--secondary-color);
|
||||
}
|
||||
|
||||
#searchInput {
|
||||
display: block;
|
||||
position: relative;
|
||||
top: 100%;
|
||||
right: 1rem;
|
||||
padding: 0.5rem;
|
||||
border: 1px solid var(--text-color);
|
||||
z-index: 5;
|
||||
width: 200px;
|
||||
background: none;
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
.controls {
|
||||
background: #111;
|
||||
padding: 1rem;
|
||||
border-top: 1px solid #333;
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.controls button {
|
||||
background: none;
|
||||
border: 1px solid var(--text-color);
|
||||
color: var(--text-color);
|
||||
padding: 0.5rem 1rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
main {
|
||||
flex-grow: 1;
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.section {
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
.section h2 {
|
||||
color: var(--secondary-color);
|
||||
font-size: 1.25rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.section-content {
|
||||
display: block;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: var(--overlay-background);
|
||||
padding: 1rem;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
code {
|
||||
background: var(--overlay-background);
|
||||
margin: 1rem 0;
|
||||
white-space: pre-wrap;
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
|
||||
footer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
background: var(--overlay-background);
|
||||
}
|
||||
|
||||
footer section{
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 2em;
|
||||
}
|
||||
|
||||
footer h4 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media print {
|
||||
.controls, #searchDropdown, #searchToggle {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
.terminal {
|
||||
background: var(--terminal-background);
|
||||
border: 2px solid var(--terminal-border);
|
||||
padding: 2rem;
|
||||
width: 300px;
|
||||
margin: 2rem auto;
|
||||
box-shadow: 0 0 10px var(--terminal-border);
|
||||
}
|
||||
|
||||
.terminal input {
|
||||
background: #1a1a1a;
|
||||
border: 1px solid var(--primary-color);
|
||||
color: var(--primary-color);
|
||||
width: 100%;
|
||||
padding: 0.5rem;
|
||||
margin-bottom: 1rem;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.terminal button {
|
||||
background: var(--secondary-color);
|
||||
border: none;
|
||||
color: var(--background-color);
|
||||
padding: 0.5rem 1rem;
|
||||
cursor: pointer;
|
||||
font-family: monospace;
|
||||
text-shadow: 0 0 3px var(--secondary-color);
|
||||
}
|
||||
@ -1,445 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link href="../assets/IosevkaSS15-Regular.ttf" rel="stylesheet">
|
||||
<link rel="stylesheet" href="../css/sterling.css">
|
||||
<link rel="stylesheet" href="../css/global.css">
|
||||
<script src="../js/sterling.js"></script>
|
||||
<title>Sterling Documentation</title>
|
||||
</head>
|
||||
<body>
|
||||
<div style="width:100%">
|
||||
<header>
|
||||
<h1>Sterling Documentation</h1>
|
||||
<input type="text" id="searchInput" placeholder="Search..." oninput="filterContent()">
|
||||
<div class="controls">
|
||||
<!--<button onclick="toggleTheme()">Toggle Theme</button>-->
|
||||
<button onclick="window.print()">Export to PDF</button>
|
||||
<button onclick="downloadOfflineVersion()">Download Offline</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
<main id="doc-content">
|
||||
|
||||
<p>Version: <code>0.1.0-alpha</code></p>
|
||||
|
||||
<h2>Preface</h2>
|
||||
<p>"An Idiot admire complexity, a genius admire simplicity" <em>Terry A. Davis</em></p>
|
||||
<p>"Master All, Ace One" <em>Boykisser</em></p>
|
||||
|
||||
<h2>Overview</h2>
|
||||
<p>Sterling is a low-level, strongly typed, systems programming language designed for performance, ABI stability, C interoperability, and full control over memory and hardware. It supports metaprogramming, hot-reloading, inline and raw assembly, and is built for multi-file compilation. It also introduces memory safety primitives and modern low-abstraction control flow enhancements.</p>
|
||||
|
||||
<h3>This Document is a work in progress, features are not yet implemented and i use this as a design document to stay true to my vision</h3>
|
||||
|
||||
<h2>File Extensions <em>(subject to change)</em></h2>
|
||||
<ul>
|
||||
<li>Source files: <code>.stg</code></li>
|
||||
<li>Header files: <code>.sth</code></li>
|
||||
</ul>
|
||||
<section class="section">
|
||||
<h2>Function</h2>
|
||||
<div class="section-content">
|
||||
|
||||
<h3>Qualifiers</h3>
|
||||
<p>Every function must declare its linkage explicitly:</p>
|
||||
|
||||
<pre><code>
|
||||
//globally visible, default linkage
|
||||
static //translation unit-local only
|
||||
inline //inline-only, no symbol emitted
|
||||
asm //raw assembly function, globally visible
|
||||
static_asm //raw assembly function, TU-local only
|
||||
inline_asm //inline-only asm, no symbol emitted
|
||||
async //for fiber (coroutine) ??
|
||||
</code></pre>
|
||||
|
||||
<h3>Syntax</h3>
|
||||
<p>All functions must explicitly declare their return type. The only exception is <code>void</code>, which may be omitted for brevity when no return value is intended.</p>
|
||||
|
||||
<pre><code>
|
||||
u32 add(u32 a, u32 b) {
|
||||
return (a + b);
|
||||
}
|
||||
|
||||
inline u32 max(u32 a, u32 b) {
|
||||
return ((a > b) ? a : b);
|
||||
}
|
||||
|
||||
exit() {
|
||||
// equivalent to void exit()
|
||||
}
|
||||
</code></pre>
|
||||
|
||||
<h3>Assembly</h3>
|
||||
<p>Write raw x86_64 assembly using <code>fn_asm</code> or <code>fn_static_asm</code>. Symbol, section, and global declaration are implicit.(placeholder)</p>
|
||||
|
||||
<pre><code>
|
||||
asm void* memset(void* dst, u8 value, u64 size) {
|
||||
test rdx, rdx
|
||||
je .done
|
||||
|
||||
mov rax, rsi
|
||||
mov rdi, rdi
|
||||
mov rcx, rdx
|
||||
|
||||
rep stosb
|
||||
|
||||
.done:
|
||||
mov rax, rdi
|
||||
ret
|
||||
}
|
||||
</code></pre>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Syscalls</h2>
|
||||
<div class="section-content">
|
||||
<p>System calls are allowed via <code>fn_asm</code> or wrapped using concrete ABI-aware interfaces. Example: (placeholder)</p>
|
||||
<pre><code>
|
||||
asm void exit() {
|
||||
mov rax, 60 ; syscall: exit
|
||||
mov rdi, 0 ; exit code
|
||||
syscall
|
||||
ret
|
||||
}
|
||||
</code></pre>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Register Access</h2>
|
||||
<div class="section-content">
|
||||
<p>Sterling exposes raw CPU registers as language-level primitives. This is intended for kernel, embedded, and runtime-critical tasks.</p>
|
||||
<pre><code>
|
||||
u64 get_rbp() {
|
||||
return rbp;
|
||||
}
|
||||
|
||||
void set_rsp(u64 val) {
|
||||
rsp = val;
|
||||
}
|
||||
</code></pre>
|
||||
<p>Supported registers: <code>rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp, r8..r15</code>.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Types</h2>
|
||||
<div class="section-content">
|
||||
|
||||
<pre><code>
|
||||
i8, i16, i32, i64 // signed integers
|
||||
u8, u16, u32, u64 // unsigned integers
|
||||
f32, f64 // 32-bit and 64-bit IEEE floats
|
||||
bool // 1-byte boolean, 0 or 1 only//maybe but not a fan of them
|
||||
char // 1-byte character (UTF-8)
|
||||
</code></pre>
|
||||
<pre><code>
|
||||
T* // Pointer to type T
|
||||
ptr* // Special pointer with implicit coercion allowed
|
||||
void* // Opaque pointer with explicit cast required
|
||||
</code></pre>
|
||||
|
||||
<pre><code>
|
||||
typedef struct {
|
||||
u32 x = 5;
|
||||
u32 y;
|
||||
} vec2u;
|
||||
|
||||
vec2u a = {}; // x = 5, y = 0
|
||||
vec2u b = {0}; // x = 0, y = 0
|
||||
vec2u c; // x = 0, y = 0
|
||||
</code></pre>
|
||||
<pre><code>
|
||||
u32 raw_val @raw; // raw_val = ? can be poopoo data
|
||||
</code></pre>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Memory Model</h2>
|
||||
<div class="section-content">
|
||||
<p>Manual memory management by default. Variables are zero-initialized unless marked <code>@raw</code>. All layout is predictable and cache-friendly. Custom allocators are encouraged.</p>
|
||||
<ul>
|
||||
<li><strong>Stack</strong>: locals</li>
|
||||
<li><strong>Heap</strong>: explicit alloc/free</li>
|
||||
<li><strong>Inline</strong>: structs passed by value</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--<section class="section">
|
||||
<h2 onclick="toggleSection(this)">Bitfields</h2>
|
||||
<div class="section-content">
|
||||
<pre><code>
|
||||
typedef struct(bitfield) {
|
||||
u8 field0 : 3;
|
||||
u8 field1 : 5;
|
||||
} Flags8;
|
||||
</code></pre>
|
||||
</div>
|
||||
</section>-->
|
||||
|
||||
<section class="section">
|
||||
<h2>Control Flow</h2>
|
||||
<div class="section-content">
|
||||
|
||||
<h3>Loop</h3>
|
||||
<p>Sterling introduces tagged loops and escape blocks for structured yet flat nested loop
|
||||
behavior:</p>
|
||||
|
||||
<pre><code>
|
||||
loop_outer: loop {
|
||||
loop_inner: loop {
|
||||
if (should_exit_inner()) break loop_inner;
|
||||
if (should_exit_outer()) break loop_outer;
|
||||
}
|
||||
}
|
||||
|
||||
loop {
|
||||
i32 i;//default init at 0
|
||||
|
||||
while() {
|
||||
do
|
||||
}
|
||||
}
|
||||
|
||||
loop {
|
||||
i32 i;
|
||||
while() {
|
||||
do
|
||||
}
|
||||
}
|
||||
|
||||
for_each (tmp : array(T)) {
|
||||
}?
|
||||
</code></pre>
|
||||
<p>This allows control without stack-nesting or excessive flags.</p>
|
||||
|
||||
<h3>Branching</h3>
|
||||
<p></p>
|
||||
|
||||
<pre><code>
|
||||
|
||||
u32 test(u32 x, u32 y) {
|
||||
if (x == y) {
|
||||
|
||||
}
|
||||
if (x == 0) {
|
||||
|
||||
}
|
||||
if (y == 0) {
|
||||
|
||||
}
|
||||
|
||||
switch (data) {
|
||||
(a) {
|
||||
break;
|
||||
}
|
||||
(b) {
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
block search {
|
||||
loop delta {
|
||||
i32 i;
|
||||
while() {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</code></pre>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Dynamic Arrays with Aligned Layout</h2>
|
||||
<div class="section-content">
|
||||
<p>Runtime-initialized aligned linear arrays can be used to simulate array-of-array structures, where all memory layout is controlled explicitly with offsets:</p>
|
||||
<pre><code>
|
||||
struct ArrayView {
|
||||
u8* data;
|
||||
u32 stride;
|
||||
u32 count;
|
||||
};
|
||||
</code></pre>
|
||||
<p>Insertions and deletions move memory explicitly, re-aligning if needed.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Dynamic Linking</h2>
|
||||
<div class="section-content">
|
||||
<p>Sterling does not rely on dynamic linking by default. Static linking is favored for OS and runtime simplicity. Dynamic linking may be optionally implemented via host-defined facilities in the future.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Metaprogramming</h2>
|
||||
<div class="section-content">
|
||||
<p><em>also i am not thinking of having something as close as what jai have, if you want solid meta programming look out for when jai become open beta</em></p>
|
||||
|
||||
<h2>Metaprogramming</h2>
|
||||
<p>Sterling supports compile-time metaprogramming via the <code>meta</code> keyword. Meta constructs are evaluated at compile time and allow structured code generation, reflection, and type introspection.</p>
|
||||
|
||||
<h3>Capabilities</h3>
|
||||
<ul>
|
||||
<li>Generate code at compile-time (functions, structs, constants)</li>
|
||||
<li>Inspect type properties: size, alignment, fields</li>
|
||||
<li>Enumerate over struct fields, enum variants, function parameters</li>
|
||||
<li>Branch compile-time logic via <code>meta if</code>, <code>meta match</code></li>
|
||||
<li>Define metafunctions using <code>meta fn</code> (not emitted at runtime)</li>
|
||||
<li>Support platform/target-specific compilation logic</li>
|
||||
</ul>
|
||||
|
||||
<h3>Restrictions</h3>
|
||||
<ul>
|
||||
<li>Meta code must be side-effect free (pure, deterministic)</li>
|
||||
<li>No runtime reflection or dynamic codegen</li>
|
||||
<li>No access to I/O, filesystem, or arbitrary memory</li>
|
||||
<li>All meta-expansions must type-check</li>
|
||||
<li>Expansion depth and iteration count are bounded</li>
|
||||
</ul>
|
||||
|
||||
<h3>Example</h3>
|
||||
<pre><code>
|
||||
meta print_fields_of(T) {
|
||||
for (field : fields(T)) {
|
||||
print("Field: ", field.name, " of type ", field.type);
|
||||
}
|
||||
}
|
||||
|
||||
meta if sizeof(T) > 64 {
|
||||
fn_inline void fast_copy(T* dst, T* src) { ... }
|
||||
}
|
||||
</code></pre>
|
||||
|
||||
<h3>Compiler Meta API (proposed)</h3>
|
||||
<pre><code>
|
||||
meta_typeof(expr)
|
||||
meta_sizeof(T)
|
||||
meta_alignof(T)
|
||||
meta_fields_of(T)
|
||||
meta_fn_params(fn)
|
||||
meta_platform() // e.g., "linux", "windows"
|
||||
meta_codegen(name, ast_block) // gated for advanced use
|
||||
</code></pre>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>ABI and Interop</h2>
|
||||
<div class="section-content">
|
||||
<p><em>TODO: Specify ABI model (System V AMD64), calling convention details, struct/pointer representation rules. C interaction, emiting ELF/COFF/Mach-O symbol tables .o</em></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Threading</h2>
|
||||
<div class="section-content">
|
||||
<p><em>TODO: Describe standard threading model, scheduler integration, context switching, green threads API.</em></p>
|
||||
|
||||
<h3>Fiber (Coroutine)</h3>
|
||||
<p>Using user managed stack that is allocated (usefull for userland threading)</p>
|
||||
|
||||
<ul>
|
||||
<li>Each <code>fiber</code> as:</li>
|
||||
<ul>
|
||||
<li>Its own manually allocated stack</li>
|
||||
<li>Registers saved/restored on yield and resume</li>
|
||||
<li>Tracked by a runtime scheduler (or user managed)</li>
|
||||
</ul>
|
||||
<li><code>fiber_yield()</code> triggers context switch, calling back into a fiber scheduler</li>
|
||||
<li>Can be pooled, migrated between threads, or used for deterministic execution (e.g., game loops, scripting)</li>
|
||||
</ul>
|
||||
|
||||
<h4>Internal Scheduler Model</h4>
|
||||
<ul>
|
||||
<li>A circular queue or priority queue of fiber_ids</li>
|
||||
<li><code>fiber_yield()</code> pushes current fiber to back of queue</li>
|
||||
<li><code>fiber_resume()</code> pulls next and switches context</li>
|
||||
</ul>
|
||||
<p>This allows async, non-blocking logic to be modeled without system threads.<p>
|
||||
|
||||
<h4>Safety and ABI Guarantees</h4>
|
||||
|
||||
<ul>
|
||||
<li>define the fiber stack layout, allowing for precise control (great for embedded targets)</li>
|
||||
<li><code>fiber_spawn</code> can return errors if stack is misaligned or exhausted</li>
|
||||
<li>ABI guarantees for fiber functions: must follow a calling convention you define (e.g., preserved registers)</li>
|
||||
|
||||
<h3>Thread</h3>
|
||||
<p></p>
|
||||
<ul>
|
||||
<li>Created via OS APIs (e.g., pthread, CreateThread, or syscall wrappers)</li>
|
||||
<li>Each thread runs independently; shares global heap and data structures</li>
|
||||
<li>You wrap OS threads and assign them entry points via thread_spawn</li>
|
||||
</ul>
|
||||
|
||||
<h4>Thread Primitives</h4>
|
||||
|
||||
<pre><code>
|
||||
thread_spawn(void fn() entry_fn) -> thread_id;
|
||||
thread_join(thread_id tid);
|
||||
thread_exit();
|
||||
</code></pre>
|
||||
|
||||
<h4>Fiber Primitives</h4>
|
||||
|
||||
<pre><code>
|
||||
typedef struct fiber {
|
||||
void* stack;
|
||||
u64 stack_size;
|
||||
void* ip;//instruction pointer
|
||||
u8 flag;
|
||||
} fiber;
|
||||
|
||||
fiber_spawn(void fn() entry_fn) -> fiber_id;
|
||||
fiber_yield();
|
||||
fiber_resume(fiber_id id);
|
||||
fiber_self() -> fiber_id;//could also be used instead of fork ex main process fibe_self = 0;
|
||||
</code></pre>
|
||||
|
||||
<h4>Optional stack control:</h4>
|
||||
|
||||
<pre><code>
|
||||
fiber_spawn_stack(void fn(), void* stack_ptr, u64 size);
|
||||
</code></pre>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Graphics and Rendering</h2>
|
||||
<div class="section-content">
|
||||
<p><em>TODO: Describe native rendering interface</em>I have been thinking about supporting amd gpu acceleration with very few set of actual call, very fewer than opengl or other, but i will focus only on one hardware at first</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Build and Compilation Model</h2>
|
||||
<div class="section-content">
|
||||
<p><em>TODO: AOT compilation, linker behavior, multi-file project structure, module system (if any).</em></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<p style="text-align: center;">Copyright @ 2025 <a href="mailto:dev@sleepeesoftware.fr">Sleepee Software</a><br>Verbatim copying and redistribution of this entire page are permitted provided this notice is preserved.<br>
|
||||
Verbatim copying and redistribution of any of the photos in the photos subdirectory is permitted under the <a href="https://opensource.org/license/mit">MIT License</a></p>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,158 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link href="../assets/IosevkaSS15-Regular.ttf" rel="stylesheet">
|
||||
<link rel="stylesheet" href="../css/sterling.css">
|
||||
<link rel="stylesheet" href="../css/global.css">
|
||||
<script src="../js/sterling.js"></script>
|
||||
<title>Sterling OS Design Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<div style="width:100%">
|
||||
<header>
|
||||
<h1>Sterling OS Design Document</h1>
|
||||
<input type="text" id="searchInput" placeholder="Search..." oninput="filterContent()">
|
||||
<div class="controls">
|
||||
<!--<button onclick="toggleTheme()">Toggle Theme</button>-->
|
||||
<button onclick="window.print()">Export to PDF</button>
|
||||
<button onclick="downloadOfflineVersion()">Download Offline</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="doc-content">
|
||||
|
||||
<h1>Minimal Capability-Based Operating System</h1>
|
||||
|
||||
<h2>Design Principles</h2>
|
||||
<ul>
|
||||
<li>No global filesystem, no path resolution</li>
|
||||
<li>No drivers in kernel, only sandboxed userspace driver processes</li>
|
||||
<li>No GPU acceleration, all rendering is deterministic software-based</li>
|
||||
<li>All resources accessed via capability tokens</li>
|
||||
<li>Processes are strictly sandboxed</li>
|
||||
<li>Programs operate on memory buffers, not raw file handles</li>
|
||||
<li>Desktop environment is a sandboxed coordinator, not a privileged process</li>
|
||||
</ul>
|
||||
|
||||
<h2>Authorization Token Model</h2>
|
||||
<p>Programs delegate access via opaque, kernel-managed tokens.</p>
|
||||
<pre><code>grant_token(target_pid, resource_id, flags) -> token_id
|
||||
accept_token(token_id) -> resource_handle
|
||||
revoke_token(token_id)</code></pre>
|
||||
|
||||
<h2>File Editing Flow</h2>
|
||||
<ol>
|
||||
<li>DE requests file via storage service</li>
|
||||
<li>Storage service provides a memory buffer</li>
|
||||
<li>Editor process receives buffer handle, edits</li>
|
||||
<li>Changes submitted back to storage via DE</li>
|
||||
</ol>
|
||||
|
||||
<h2>Driver Model</h2>
|
||||
<ul>
|
||||
<li>All drivers run as fully unprivileged user processes</li>
|
||||
<li>No driver registration or kernel mediation required</li>
|
||||
<li>Drivers communicate with hardware via explicit kernel-exposed capability channels</li>
|
||||
<li>No dynamic linking or privileged probing allowed</li>
|
||||
<li>Users can run or replace any driver without OS permission</li>
|
||||
</ul>
|
||||
|
||||
<h2>Graphics System</h2>
|
||||
<ul>
|
||||
<li>No GPU support, no shaders</li>
|
||||
<li>Software renderer processes draw via shared memory</li>
|
||||
<li>DE composites framebuffers deterministically</li>
|
||||
</ul>
|
||||
|
||||
<h2>Programming Language Requirements</h2>
|
||||
<ul>
|
||||
<li>Manual memory management</li>
|
||||
<li>Low-level data layout control</li>
|
||||
<li>Inline assembly support</li>
|
||||
<li>Pattern matching and compile-time macros</li>
|
||||
<li>No runtime, no global init, no dynamic linking</li>
|
||||
</ul>
|
||||
|
||||
<h2>Execution Model</h2>
|
||||
<ul>
|
||||
<li>Programs are spawned with exact buffer and token permissions</li>
|
||||
<li>No shared global state</li>
|
||||
<li>All IO is mediated via explicit capability-based services</li>
|
||||
<li>Everything is inspectable and reproducible</li>
|
||||
</ul>
|
||||
|
||||
<h2>Sandboxing Model</h2>
|
||||
<p>All processes are isolated via strict memory boundaries and capability-scoped access. No process can access global state, shared memory, or system calls without explicit capability grants.</p>
|
||||
|
||||
<h3>Memory Layout</h3>
|
||||
<pre class="diagram">
|
||||
+-----------------------+
|
||||
| Code (RX) |
|
||||
+-----------------------+
|
||||
| Data (RW) |
|
||||
+-----------------------+
|
||||
| Shared Buffers (RWX?) | ← only if explicitly mapped by kernel
|
||||
+-----------------------+
|
||||
| Stack (RW) |
|
||||
+-----------------------+
|
||||
</pre>
|
||||
|
||||
<h3>Process Launch</h3>
|
||||
<ul>
|
||||
<li>Preallocated memory map (no heap growth)</li>
|
||||
<li>Passed a syscall pointer table, token list, and init buffer</li>
|
||||
<li>Cannot request global system resources directly</li>
|
||||
</ul>
|
||||
|
||||
<h3>Capability Enforcement</h3>
|
||||
<p>All access is mediated via capability tokens, handed off securely:</p>
|
||||
<pre><code>
|
||||
token_id = request_token(pid, SERVICE_IO, READ_WRITE);
|
||||
handle = accept_token(token_id);
|
||||
</code></pre>
|
||||
<ul>
|
||||
<li>Token scope, rights, and duration enforced by kernel</li>
|
||||
<li>No access without explicit grant</li>
|
||||
<li>All capability use is auditable and revocable</li>
|
||||
</ul>
|
||||
|
||||
<h3>Filesystem Abstraction</h3>
|
||||
<ul>
|
||||
<li>No global file system</li>
|
||||
<li>Programs receive only memory buffers with scoped access</li>
|
||||
<li>Read/write must go through kernel-mapped tokens</li>
|
||||
</ul>
|
||||
|
||||
<h3>Driver Isolation</h3>
|
||||
<ul>
|
||||
<li>Drivers are userland processes only</li>
|
||||
<li>No direct port I/O or DMA access</li>
|
||||
<li>Hardware is accessed via kernel-exposed capability channels</li>
|
||||
</ul>
|
||||
|
||||
<h3>IPC</h3>
|
||||
<ul>
|
||||
<li>All inter-process communication is routed via the kernel</li>
|
||||
<li>Uses named ports and token-authenticated message queues</li>
|
||||
<li>No shared memory by default</li>
|
||||
</ul>
|
||||
|
||||
<h3>Future Additions</h3>
|
||||
<ul>
|
||||
<li>Deterministic scheduler</li>
|
||||
<li>Audit trail of all token activity</li>
|
||||
<li>Formal capability typing system</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Philosophy</h2>
|
||||
<p>This OS is not a POSIX clone. It is a deterministic, capability-secure, user-controlled computing environment built to reject legacy complexity and embrace verifiable simplicity.</p>
|
||||
</main>
|
||||
<footer>
|
||||
<p style="text-align: center;">Copyright @ 2025 <a href="mailto:dev@sleepeesoftware.fr">Sleepee Software</a><br>Verbatim copying and redistribution of this entire page are permitted provided this notice is preserved.<br>
|
||||
Verbatim copying and redistribution of any of the photos in the photos subdirectory is permitted under the <a href="https://opensource.org/license/mit">MIT License</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
1
sleepeesoftware.fr/html/blog.html
Normal file
@ -0,0 +1 @@
|
||||
<div class="content"></div>
|
||||
@ -1,26 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Sleepee Software</title>
|
||||
<!-- Google Font -->
|
||||
<link href="../assets/IosevkaSS15-Regular.ttf" rel="stylesheet">
|
||||
<!-- style --->
|
||||
<link rel="stylesheet" href="css/global.css">
|
||||
<link rel="stylesheet" href="css/base.css">
|
||||
<!-- icon -->
|
||||
<!--<link rel="icon" type="image/png" href="/assets/favicon-96x96.png" sizes="96x96" />-->
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon.svg" />
|
||||
<link rel="shortcut icon" href="/assets/favicon.ico" />
|
||||
<link rel="manifest" href="/assets/site.webmanifest" />
|
||||
</head>
|
||||
<body>
|
||||
<a href="http://localhost:8080/html/SterlingLang.html" class="card-body">
|
||||
<h2 class="title">COUCOU</h2>
|
||||
<p class="description">
|
||||
test 32332323490838329ew0
|
||||
</p>
|
||||
</a>
|
||||
</body>
|
||||
</html>
|
||||
0
sleepeesoftware.fr/html/forums.html
Normal file
7
sleepeesoftware.fr/html/learn.html
Normal file
@ -0,0 +1,7 @@
|
||||
<!--
|
||||
This page will be a way for the user to learn c from 0 (en utilisant des travaux diriges avec parfois des codes reviews sur discord).
|
||||
-->
|
||||
|
||||
<section id="First Taste">
|
||||
|
||||
</section>
|
||||
3
sleepeesoftware.fr/html/shop.html
Normal file
@ -0,0 +1,3 @@
|
||||
<body>
|
||||
|
||||
<div class="content"></div>
|
||||
@ -6,11 +6,9 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Sleepee Software</title>
|
||||
<!-- Google Font -->
|
||||
<link href="../assets/IosevkaSS15-Regular.ttf" rel="stylesheet">
|
||||
<link href="assets/IosevkaSS15-Regular.ttf" rel="stylesheet">
|
||||
<!-- style --->
|
||||
<link rel="stylesheet" href="css/global.css">
|
||||
<link rel="stylesheet" href="css/base.css">
|
||||
<link rel="stylesheet" href="css/loading_screen.css">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<!-- icon -->
|
||||
<!--<link rel="icon" type="image/png" href="/assets/favicon-96x96.png" sizes="96x96" />-->
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon.svg" />
|
||||
@ -18,80 +16,265 @@
|
||||
<link rel="manifest" href="/assets/site.webmanifest" />
|
||||
</head>
|
||||
<body>
|
||||
<!--<div id="top"></div>
|
||||
<div id="loading-screen">
|
||||
<div class="loading-text">PRESS TO START</div>
|
||||
</div>
|
||||
<div class="grid-bg"></div>
|
||||
<div class="crt-overlay"></div>
|
||||
<div class="foreground-container hidden">
|
||||
|
||||
<header>
|
||||
<h1 class="page">Sleepee Software</h1>
|
||||
<nav><ul>
|
||||
<li><a href="#" id="nav-landing">Home</a></li>
|
||||
<li><a href="#" id="nav-project">Project</a></li>
|
||||
<li><a href="#" id="nav-blog">Blog</a></li>
|
||||
<li><a href="#" id="nav-chat">Chat</a></li>
|
||||
<li><a href="#" id="nav-login">Login</a></li>
|
||||
</ul></nav>
|
||||
</header>
|
||||
<div class="content">-->
|
||||
<header>
|
||||
<nav id="top-nav"><ul>
|
||||
<img src="assets/cooltext484352697795184.png" style="max-width: 30%; height: auto;">
|
||||
<li><a href="#" id="nav-landing">Home</a></li>
|
||||
<li><a href="#" id="nav-blog">Blog</a></li>
|
||||
<!--<li><a href="#" id="nav-forum">Chat</a></li>-->
|
||||
<li><a href="#" id="nav-learn">Learn</a></li>
|
||||
<li><a href="#" id="nav-shop">Shop</a></li>
|
||||
<li><a href="#" id="nav-login">Login or Account</a></li>
|
||||
</ul></nav>
|
||||
</header>
|
||||
|
||||
<main id="main-content">
|
||||
<section id="landing-section">
|
||||
<h2>Welcome to Sleepee Software</h2>
|
||||
<h3>Experience software in neon-lit glory !</h3>
|
||||
<br>
|
||||
<h2>Newsfeed</h2>
|
||||
<div id="news-ticker">
|
||||
<p>Nothing...</p>
|
||||
<!-- TODO: fetch api for news -->
|
||||
</div>
|
||||
</section>
|
||||
<main>
|
||||
|
||||
<section id="project-section" class="hidden">
|
||||
<div id="card-container">
|
||||
<h2>Projects</h2>
|
||||
<div id="docs-list">
|
||||
<li><a href="html/SterlingLang.html">Sterling Lang</a></li>
|
||||
<li><a href="html/SterlingOsDesign.html">Sterling OS</a></li>
|
||||
</div>
|
||||
<div id="repo-list">
|
||||
<p>Loading...</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="container-aboutme">
|
||||
<h1>About Me</h1>
|
||||
<section id="Preambule">
|
||||
<h1>Preambule</h1>
|
||||
</section>
|
||||
<br>
|
||||
<section id="neuro">
|
||||
<h2>Desordre Neurologique</h2>
|
||||
<p>La section suivante sera sous forme de poeme afin d'essayer d'exterioriser mon ressentie</p>
|
||||
<h3>TSA</h3>
|
||||
<h3>TDA</h3>
|
||||
<h3>HI</h3>
|
||||
<h3>Depression</h3>
|
||||
</section>
|
||||
<br>
|
||||
<section id="shitpost">
|
||||
<h2>Shitpost</h2>
|
||||
<h3>Vision sur l'Informatique</h3>
|
||||
<h3>femboy</h3>
|
||||
<p>Volibear UwU Daddy</p>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<!-- TODO: make login a popop that allow to use irc and blog -->
|
||||
<section id="blog-section" class="hidden">
|
||||
<h2>Studio Blog</h2>
|
||||
<div id="posts">
|
||||
<p>Coming soon...</p>
|
||||
</div>
|
||||
</section>
|
||||
<section id="container-dev">
|
||||
<h1>Projects</h1>
|
||||
<section id="SterlingOs">
|
||||
<h1>Sterling OS</h1>
|
||||
<h3>Minimal Capability-Based Operating System</h3>
|
||||
<h2>Design Principles</h2>
|
||||
<ul>
|
||||
<li>No global filesystem, no path resolution</li>
|
||||
<li>No drivers in kernel, only sandboxed userspace driver processes</li>
|
||||
<li>No GPU acceleration, all rendering is deterministic software-based</li>
|
||||
<li>All resources accessed via capability tokens</li>
|
||||
<li>Processes are strictly sandboxed</li>
|
||||
<li>Programs operate on memory buffers, not raw file handles</li>
|
||||
<li>Desktop environment is a sandboxed coordinator, not a privileged process</li>
|
||||
</ul>
|
||||
|
||||
<section id="chat-section" class="hidden">
|
||||
<h2>Community Chat</h2>
|
||||
<div id="chat-window" class="terminal">
|
||||
<p><em>IRC interface coming soon...</em></p>
|
||||
</div>
|
||||
</section>
|
||||
<h2>Authorization Token Model</h2>
|
||||
<p>Programs delegate access via opaque, kernel-managed tokens.</p>
|
||||
<pre><code>
|
||||
grant_token(target_pid, resource_id, flags) -> token_id
|
||||
accept_token(token_id) -> resource_handle
|
||||
revoke_token(token_id)
|
||||
</code></pre>
|
||||
|
||||
<section id="login-section" class="hidden">
|
||||
<div class="terminal">
|
||||
<h2>Login</h2>
|
||||
<form id="login-form">
|
||||
<input type="text" placeholder="name" id="username" required>
|
||||
<input type="password" placeholder="pwd" id="password" required>
|
||||
<button type="submit">Enter</button>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
</div>
|
||||
<footer class="footer-container hidden">
|
||||
<p style="text-align: center;">Copyright @ 2025 <a href="mailto:dev@sleepeesoftware.fr">Sleepee Software</a><br>Verbatim copying and redistribution of this entire page are permitted provided this notice is preserved.<br>
|
||||
<h2>File Editing Flow</h2>
|
||||
<ol>
|
||||
<li>DE requests file via storage service</li>
|
||||
<li>Storage service provides a memory buffer</li>
|
||||
<li>Editor process receives buffer handle, edits</li>
|
||||
<li>Changes submitted back to storage via DE</li>
|
||||
</ol>
|
||||
|
||||
<h2>Driver Model</h2>
|
||||
<ul>
|
||||
<li>All drivers run as fully unprivileged user processes</li>
|
||||
<li>No driver registration or kernel mediation required</li>
|
||||
<li>Drivers communicate with hardware via explicit kernel-exposed capability channels</li>
|
||||
<li>No dynamic linking or privileged probing allowed</li>
|
||||
<li>Users can run or replace any driver without OS permission</li>
|
||||
</ul>
|
||||
|
||||
<h2>Graphics System</h2>
|
||||
<ul>
|
||||
<li>No GPU support, no shaders</li>
|
||||
<li>Software renderer processes draw via shared memory</li>
|
||||
<li>DE composites framebuffers deterministically</li>
|
||||
</ul>
|
||||
|
||||
<h2>Programming Language Requirements</h2>
|
||||
<ul>
|
||||
<li>Manual memory management</li>
|
||||
<li>Low-level data layout control</li>
|
||||
<li>Inline assembly support</li>
|
||||
<li>Pattern matching and compile-time macros</li>
|
||||
<li>No runtime, no global init, no dynamic linking</li>
|
||||
</ul>
|
||||
|
||||
<h2>Execution Model</h2>
|
||||
<ul>
|
||||
<li>Programs are spawned with exact buffer and token permissions</li>
|
||||
<li>No shared global state</li>
|
||||
<li>All IO is mediated via explicit capability-based services</li>
|
||||
<li>Everything is inspectable and reproducible</li>
|
||||
</ul>
|
||||
|
||||
<h2>Sandboxing Model</h2>
|
||||
<p>All processes are isolated via strict memory boundaries and capability-scoped access. No process can access global state, shared memory, or system calls without explicit capability grants.</p>
|
||||
|
||||
<h3>Memory Layout</h3>
|
||||
<pre class="diagram">
|
||||
+-----------------------+
|
||||
| Code (RX) |
|
||||
+-----------------------+
|
||||
| Data (RW) |
|
||||
+-----------------------+
|
||||
| Shared Buffers (RWX?) | ← only if explicitly mapped by kernel
|
||||
+-----------------------+
|
||||
| Stack (RW) |
|
||||
+-----------------------+
|
||||
</pre>
|
||||
|
||||
<h3>Process Launch</h3>
|
||||
<ul>
|
||||
<li>Preallocated memory map (no heap growth)</li>
|
||||
<li>Passed a syscall pointer table, token list, and init buffer</li>
|
||||
<li>Cannot request global system resources directly</li>
|
||||
</ul>
|
||||
|
||||
<h3>Capability Enforcement</h3>
|
||||
<p>All access is mediated via capability tokens, handed off securely:</p>
|
||||
<pre><code>
|
||||
token_id = request_token(pid, SERVICE_IO, READ_WRITE);
|
||||
handle = accept_token(token_id);
|
||||
</code></pre>
|
||||
<ul>
|
||||
<li>Token scope, rights, and duration enforced by kernel</li>
|
||||
<li>No access without explicit grant</li>
|
||||
<li>All capability use is auditable and revocable</li>
|
||||
</ul>
|
||||
|
||||
<h3>Filesystem Abstraction</h3>
|
||||
<ul>
|
||||
<li>No global file system</li>
|
||||
<li>Programs receive only memory buffers with scoped access</li>
|
||||
<li>Read/write must go through kernel-mapped tokens</li>
|
||||
</ul>
|
||||
|
||||
<h3>Driver Isolation</h3>
|
||||
<ul>
|
||||
<li>Drivers are userland processes only</li>
|
||||
<li>No direct port I/O or DMA access</li>
|
||||
<li>Hardware is accessed via kernel-exposed capability channels</li>
|
||||
</ul>
|
||||
|
||||
<h3>IPC</h3>
|
||||
<ul>
|
||||
<li>All inter-process communication is routed via the kernel</li>
|
||||
<li>Uses named ports and token-authenticated message queues</li>
|
||||
<li>No shared memory by default</li>
|
||||
</ul>
|
||||
|
||||
<h3>Future Additions</h3>
|
||||
<ul>
|
||||
<li>Deterministic scheduler</li>
|
||||
<li>Audit trail of all token activity</li>
|
||||
<li>Formal capability typing system</li>
|
||||
</ul>
|
||||
|
||||
<h2>Philosophy</h2>
|
||||
<p>Not a POSIX clone. It is a deterministic, capability-secure, user-controlled computing environment built to reject legacy complexity and embrace verifiable simplicity.</p>
|
||||
</section><br>
|
||||
|
||||
<section id="SterlingLang">
|
||||
|
||||
</section><br>
|
||||
|
||||
<section class="SleepeeLib">
|
||||
|
||||
</section><br>
|
||||
|
||||
<section class="Game Engine">
|
||||
|
||||
</section><br>
|
||||
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<!-- make each project as a tab kinda like browser tab, and switch page on project select, that should allow to dowload page by page -->
|
||||
|
||||
<section id="Music">
|
||||
|
||||
</section>
|
||||
|
||||
<section id="Writing">
|
||||
|
||||
</section>
|
||||
|
||||
<section id="Drawing">
|
||||
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<section id="Minecraft">
|
||||
<h2>Minecraft</h2>
|
||||
<h3>Mon Serveur</h3>
|
||||
<p>tu dois te login pour te faire whitelist</p>
|
||||
<h3>Modpack</h3>
|
||||
<h3>Creative World</h3>
|
||||
<!-- ajouter un caroussel avec chacun de mes mondes avec une popup descriptif et le lien -->
|
||||
</section><br>
|
||||
|
||||
<section id="League of Legends">
|
||||
<h2>League of Legends</h2>
|
||||
<i>je ne suis pas joueur pro.</i><br>
|
||||
<h3>Guide sur Yasuo</h3>
|
||||
<h4>Les Combos</h4>
|
||||
<h4>Build Actuel</h4>
|
||||
<h4>Runes Actuel</h4>
|
||||
<br>
|
||||
<a href="https://www.youtube.com/playlist?list=PL0RgKOdYjzg_P5F88zNTydaJAFAm6LGM2">Playlist sur Youtube</a>
|
||||
</section><br>
|
||||
|
||||
<section id="Dwarf Fortress">
|
||||
<h2>Dwarf Fortress</h2>
|
||||
<h3>Histoire de Mes Forteresse</h3>
|
||||
</section><br>
|
||||
|
||||
<section id="Other">
|
||||
|
||||
</section>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<aside>
|
||||
<nav>
|
||||
<a href="#top">top</a>
|
||||
<ul>
|
||||
<a href="#Preambule">Preambule</a>
|
||||
<a href="#neuro">Desordre Neurologique</a>
|
||||
<a href="#shitpost">Shitpost</a>
|
||||
</ul>
|
||||
<a href="#container-dev">Project</a>
|
||||
<ul>
|
||||
<a href="#SterlingOs">Sterling Os</a>
|
||||
</ul>
|
||||
</nav>
|
||||
</aside>
|
||||
|
||||
<footer>
|
||||
<p>Copyright @ 2025 <a href="mailto:dev@sleepeesoftware.fr">Sleepee Software</a><br>Verbatim copying and redistribution of this entire page are permitted provided this notice is preserved.<br>
|
||||
Verbatim copying and redistribution of any of the photos in the photos subdirectory is permitted under the <a href="https://opensource.org/license/mit">MIT License</a></p>
|
||||
</footer>
|
||||
<script src="js/index.js"></script>
|
||||
<!--<script src="js/index.js"></script>-->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -5,51 +5,9 @@ document.querySelectorAll('nav ul li a').forEach(link => {
|
||||
document.querySelectorAll('main section').forEach(sec => sec.classList.add('hidden'));
|
||||
const section = document.getElementById(target);
|
||||
if (section) section.classList.remove('hidden');
|
||||
if (target == 'project-section') load_card();
|
||||
});
|
||||
});
|
||||
|
||||
document.getElementById('login-form')?.addEventListener('submit', function(e) {
|
||||
e.preventDefault();
|
||||
const username = document.getElementById('username').value;
|
||||
alert(`Logging in as ${username}...`);
|
||||
// TODO: call backend API for authentication
|
||||
});
|
||||
|
||||
function load_card() {
|
||||
|
||||
const docslist = document.getElementById("docs-list");
|
||||
docslist.innerHTML = "";
|
||||
const docsitem = document.createElement("div");
|
||||
docsitem.innerHTML = `
|
||||
<a class="card-body" href="html/SterlingLang.html" target="_blank">
|
||||
<h2 class="card-title">Sterling Lang</h2>
|
||||
<p class="card-description">Sterling Programming Langage</p>
|
||||
</a>
|
||||
<a class="card-body" href="html/SterlingOsDesign.html" target="_blank">
|
||||
<h2 class="card-title">SterlingOs</h2>
|
||||
<p class="card-description">Sterling Operating System Design Documents</p>
|
||||
</a>`;
|
||||
docslist.appendChild(docsitem);
|
||||
|
||||
fetch("/gitea-repos/")
|
||||
.then(res => res.json())
|
||||
.then(repos => {
|
||||
const list = document.getElementById("repo-list");
|
||||
list.innerHTML = ""; // Clear "Loading..."
|
||||
repos.forEach(function(repo) {
|
||||
const item = document.createElement("");
|
||||
item.innerHTML = `
|
||||
<strong><a class="card-body" href="${repo.html_url}" target="_blank">
|
||||
<h2 class="card-title">${repo.name}</h2>
|
||||
<p class="card-description">${repo.description || "No description"}</p>
|
||||
</a>`;
|
||||
list.appendChild(item);
|
||||
});
|
||||
})
|
||||
.catch(err => console.error("Error fetching repos: ", err));
|
||||
}
|
||||
|
||||
/*
|
||||
onload
|
||||
*/
|
||||
@ -62,8 +20,29 @@ document.addEventListener("DOMContentLoaded", function() {
|
||||
const container = document.querySelector(".foreground-container");
|
||||
container.classList.remove("hidden");
|
||||
container.classList.add("fade-in");
|
||||
const footer = document.querySelector(".footer-container")
|
||||
footer.classList.remove("hidden");
|
||||
footer.classList.add("fade-in");
|
||||
const container2 = document.querySelector(".navbar-container");
|
||||
container2.classList.remove("hidden");
|
||||
container2.classList.add("fade-in");
|
||||
});
|
||||
});
|
||||
|
||||
function filterContent() {
|
||||
const query = document.getElementById('searchInput').value.toLowerCase();
|
||||
document.querySelectorAll('.section').forEach(section => {
|
||||
const text = section.innerText.toLowerCase();
|
||||
section.style.display = text.includes(query) ? 'block' : 'none';
|
||||
});
|
||||
}
|
||||
|
||||
function downloadOfflineVersion() {
|
||||
const blob = new Blob([document.documentElement.outerHTML], { type: 'text/html' });
|
||||
const a = document.createElement('a');
|
||||
a.href = URL.createObjectURL(blob);
|
||||
a.download = 'SystemsLangDocumentation.html';
|
||||
a.click();
|
||||
}
|
||||
|
||||
function toggleSearch() {
|
||||
const dropdown = document.getElementById('searchDropdown');
|
||||
dropdown.style.display = dropdown.style.display === 'block' ? 'none' : 'block';
|
||||
}
|
||||
|
||||
@ -1,20 +0,0 @@
|
||||
function filterContent() {
|
||||
const query = document.getElementById('searchInput').value.toLowerCase();
|
||||
document.querySelectorAll('.section').forEach(section => {
|
||||
const text = section.innerText.toLowerCase();
|
||||
section.style.display = text.includes(query) ? 'block' : 'none';
|
||||
});
|
||||
}
|
||||
|
||||
function downloadOfflineVersion() {
|
||||
const blob = new Blob([document.documentElement.outerHTML], { type: 'text/html' });
|
||||
const a = document.createElement('a');
|
||||
a.href = URL.createObjectURL(blob);
|
||||
a.download = 'SystemsLangDocumentation.html';
|
||||
a.click();
|
||||
}
|
||||
|
||||
function toggleSearch() {
|
||||
const dropdown = document.getElementById('searchDropdown');
|
||||
dropdown.style.display = dropdown.style.display === 'block' ? 'none' : 'block';
|
||||
}
|
||||
39
sleepeesoftware.fr/style.css
Normal file
@ -0,0 +1,39 @@
|
||||
body {
|
||||
font-family: sans-serif;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 3fr;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
header, footer {
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
background-color: rebeccapurple;
|
||||
color: whitesmoke;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
aside {
|
||||
border-right: 1px solid rebeccapurple;
|
||||
}
|
||||
|
||||
header {
|
||||
grid-column: 1 / 3;
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
main {
|
||||
grid-column: 2;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
aside {
|
||||
grid-column: 1;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
footer {
|
||||
grid-column: 1 / 3;
|
||||
grid-row: 3;
|
||||
}
|
||||
|
||||
290
sleepeesoftware.fr/stylebackup.css
Normal file
@ -0,0 +1,290 @@
|
||||
:root {
|
||||
--primary-color: #00ffff;
|
||||
--secondary-color: #ff00ff;
|
||||
--background-color: #0d0d0d;
|
||||
--text-color: #f0f0f0;
|
||||
--overlay-background: rgba(0, 0, 0, 0.85);
|
||||
--button-background: #ff00ff;
|
||||
--button-hover-background: #00ffff;
|
||||
--scanline-color: rgba(255, 255, 255, 0.05);
|
||||
--glow-color: rgba(0, 255, 255, 0.3);
|
||||
--terminal-background: rgba(0, 0, 0, 0.9);
|
||||
--terminal-border: #ff00ff;
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
|
||||
@keyframes scanlines {
|
||||
0% { transform: translateY(0); }
|
||||
50% { transform: translateY(-2px); }
|
||||
100% { transform: translateY(0); }
|
||||
}
|
||||
|
||||
@keyframes vhs-static {
|
||||
0% { transform: translate(0, 0); }
|
||||
25% { transform: translate(-1px, 1px); }
|
||||
50% { transform: translate(1px, -0.5px); }
|
||||
75% { transform: translate(-0.5px, 0.5px); }
|
||||
100% { transform: translate(0.5px, -1px); }
|
||||
}
|
||||
|
||||
@keyframes flicker {
|
||||
0%, 100% { opacity: 0.8; }
|
||||
50% { opacity: 1; }
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.75; }
|
||||
}
|
||||
|
||||
|
||||
@keyframes rgb-split {
|
||||
0%, 100% {
|
||||
transform: translate(0px, 0px);
|
||||
}
|
||||
50% {
|
||||
transform: translate(-0.5px, 0.5px);
|
||||
}
|
||||
}
|
||||
|
||||
.fade-in {
|
||||
animation: fadeIn 0.5s ease-out forwards;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.crt-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
mix-blend-mode: screen;
|
||||
animation: flicker 1.5s infinite;
|
||||
border-radius: var(--border-radius);
|
||||
box-shadow: inset 0 0 40px var(--glow-color);
|
||||
}
|
||||
|
||||
.grid-bg {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: repeating-linear-gradient(
|
||||
to right,
|
||||
rgba(0, 255, 255, 0.1) 0px,
|
||||
rgba(0, 255, 255, 0.1) 1px,
|
||||
transparent 1px,
|
||||
transparent 40px
|
||||
), repeating-linear-gradient(
|
||||
to bottom,
|
||||
rgba(0, 255, 255, 0.1) 0px,
|
||||
rgba(0, 255, 255, 0.1) 1px,
|
||||
transparent 1px,
|
||||
transparent 40px
|
||||
);
|
||||
background-color: var(--background-color);
|
||||
z-index: -4;
|
||||
}
|
||||
|
||||
#top-nav {
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 1rem 2rem;
|
||||
background: rgba(0, 0, 0, 0.8);
|
||||
border-bottom: 2px solid var(--secondary-color);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
#left-nav {
|
||||
position: fixed;
|
||||
top: 96px;
|
||||
left: 0;
|
||||
width: 200px;
|
||||
height: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
padding: 1rem;
|
||||
background: rgba(0, 0, 0, 0.85);
|
||||
border-right: 2px solid var(--primary-color);
|
||||
z-index: 5;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
#right-nav {
|
||||
position: fixed;
|
||||
top: 96px;
|
||||
right: 0;
|
||||
width: 200px;
|
||||
height: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-end;
|
||||
padding: 1rem;
|
||||
background: rgba(0, 0, 0, 0.85);
|
||||
border-left: 2px solid var(--primary-color);
|
||||
z-index: 5;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
nav ul li a {
|
||||
text-decoration: none;
|
||||
color: var(--primary-color);
|
||||
padding: 0.5rem 1rem;
|
||||
border: 1px solid var(--primary-color);
|
||||
border-radius: 4px;
|
||||
text-shadow: 0 0 3px var(--primary-color);
|
||||
}
|
||||
|
||||
nav ul li a:hover {
|
||||
background: var(--primary-color);
|
||||
color: var(--background-color);
|
||||
}
|
||||
|
||||
#loading-screen {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgb(0, 0, 0);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 9999;
|
||||
cursor: pointer;
|
||||
pointer-events: all; /* Ensure the user can click on the loading screen */
|
||||
z-index: 9999;
|
||||
mix-blend-mode: screen;
|
||||
box-shadow: inset 0 0 20px rgba(255, 255, 255, 0.15);
|
||||
animation: flicker 3.0s infinite;
|
||||
}
|
||||
|
||||
#loading-screen::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('/assets/RpdC.gif') repeat;
|
||||
opacity: 0.05;
|
||||
mix-blend-mode: screen;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
#loading-screen::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: repeating-linear-gradient(
|
||||
0deg,
|
||||
rgba(255, 255, 255, 0.05) 0px,
|
||||
rgba(255, 255, 255, 0.05) 1px,
|
||||
transparent 1px,
|
||||
transparent 4px
|
||||
);
|
||||
animation: scanlines 0.1s linear infinite;
|
||||
z-index: -2;
|
||||
}
|
||||
|
||||
.loading-text {
|
||||
color: var(--primary-color);
|
||||
font-family: 'Orbitron', sans-serif;
|
||||
font-size: 2rem;
|
||||
text-align: center;
|
||||
text-shadow: 0 0 15px var(--primary-color), 0 0 30px var(--primary-color);
|
||||
animation: pulse 1.5s infinite;
|
||||
z-index: 10000;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Orbitron', sans-serif;
|
||||
color: var(--text-color);
|
||||
background: var(--background-color);
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
body::before {
|
||||
content: "";
|
||||
position: fixed;
|
||||
top: 0; left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
background: url('/assets/RpdC.gif') repeat;
|
||||
opacity: 0.05;
|
||||
mix-blend-mode: screen;
|
||||
}
|
||||
|
||||
body::after {
|
||||
content: "";
|
||||
position: fixed;
|
||||
top: 0; left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
pointer-events: none;
|
||||
background: repeating-linear-gradient(
|
||||
0deg,
|
||||
--scanline-color 0px,
|
||||
--scanline-color 1px,
|
||||
transparent 1px,
|
||||
transparent 4px
|
||||
);
|
||||
animation: scanlines 0.1s linear infinite;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
max-width: 960px;
|
||||
min-height: 720px;
|
||||
margin: 0 auto;
|
||||
padding: 32px;
|
||||
background-color: rgba(0, 0, 0, 0.85);
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
footer a {
|
||||
text-decoration: none;
|
||||
color: var(--primary-color);
|
||||
}
|
||||
|
||||
footer a:hover {
|
||||
color: var(--secondary-color);
|
||||
|
||||
}
|
||||
|
||||
footer p {
|
||||
text-align: center;
|
||||
}
|
||||