Should be updating a bunch of the CSS to have some better mobile UX

This commit is contained in:
2025-12-09 20:07:43 -06:00
parent 216c53aade
commit f161d4f5c0
18 changed files with 659 additions and 960 deletions

1
.gitignore vendored
View File

@@ -7,6 +7,7 @@ node_modules
.wrangler .wrangler
/.svelte-kit /.svelte-kit
/build /build
*.zip
# OS # OS
.DS_Store .DS_Store

View File

@@ -1,11 +1,11 @@
{ {
"lockfileVersion": 1, "lockfileVersion": 1,
"configVersion": 0,
"workspaces": { "workspaces": {
"": { "": {
"name": "on-the-spectrum", "name": "on-the-spectrum",
"devDependencies": { "devDependencies": {
"@sveltejs/adapter-auto": "^7.0.0", "@sveltejs/adapter-auto": "^7.0.0",
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.48.5", "@sveltejs/kit": "^2.48.5",
"@sveltejs/vite-plugin-svelte": "^6.2.1", "@sveltejs/vite-plugin-svelte": "^6.2.1",
"prettier": "^3.6.2", "prettier": "^3.6.2",
@@ -132,6 +132,8 @@
"@sveltejs/adapter-auto": ["@sveltejs/adapter-auto@7.0.0", "", { "peerDependencies": { "@sveltejs/kit": "^2.0.0" } }, "sha512-ImDWaErTOCkRS4Gt+5gZuymKFBobnhChXUZ9lhUZLahUgvA4OOvRzi3sahzYgbxGj5nkA6OV0GAW378+dl/gyw=="], "@sveltejs/adapter-auto": ["@sveltejs/adapter-auto@7.0.0", "", { "peerDependencies": { "@sveltejs/kit": "^2.0.0" } }, "sha512-ImDWaErTOCkRS4Gt+5gZuymKFBobnhChXUZ9lhUZLahUgvA4OOvRzi3sahzYgbxGj5nkA6OV0GAW378+dl/gyw=="],
"@sveltejs/adapter-static": ["@sveltejs/adapter-static@3.0.10", "", { "peerDependencies": { "@sveltejs/kit": "^2.0.0" } }, "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew=="],
"@sveltejs/kit": ["@sveltejs/kit@2.49.1", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/cookie": "^0.6.0", "acorn": "^8.14.1", "cookie": "^0.6.0", "devalue": "^5.3.2", "esm-env": "^1.2.2", "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", "sirv": "^3.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0", "svelte": "^4.0.0 || ^5.0.0-next.0", "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["@opentelemetry/api"], "bin": { "svelte-kit": "svelte-kit.js" } }, "sha512-vByReCTTdlNM80vva8alAQC80HcOiHLkd8XAxIiKghKSHcqeNfyhp3VsYAV8VSiPKu4Jc8wWCfsZNAIvd1uCqA=="], "@sveltejs/kit": ["@sveltejs/kit@2.49.1", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/cookie": "^0.6.0", "acorn": "^8.14.1", "cookie": "^0.6.0", "devalue": "^5.3.2", "esm-env": "^1.2.2", "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", "sirv": "^3.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0", "svelte": "^4.0.0 || ^5.0.0-next.0", "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["@opentelemetry/api"], "bin": { "svelte-kit": "svelte-kit.js" } }, "sha512-vByReCTTdlNM80vva8alAQC80HcOiHLkd8XAxIiKghKSHcqeNfyhp3VsYAV8VSiPKu4Jc8wWCfsZNAIvd1uCqA=="],
"@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@6.2.1", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", "debug": "^4.4.1", "deepmerge": "^4.3.1", "magic-string": "^0.30.17", "vitefu": "^1.1.1" }, "peerDependencies": { "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ=="], "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@6.2.1", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", "debug": "^4.4.1", "deepmerge": "^4.3.1", "magic-string": "^0.30.17", "vitefu": "^1.1.1" }, "peerDependencies": { "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ=="],

View File

@@ -18,3 +18,18 @@
{/if} {/if}
</div> </div>
<style>
.axis {
margin: 10px 0;
padding: 10px;
border: 1px solid currentColor;
opacity: 0.9;
}
.axis-label {
font-weight: bold;
margin-bottom: 5px;
font-size: 11px;
text-transform: uppercase;
}
</style>

View File

@@ -17,9 +17,13 @@
gap: 1rem; gap: 1rem;
justify-content: center; justify-content: center;
flex-wrap: wrap; flex-wrap: wrap;
button {
width: 45%;
}
}
@media screen and (min-width: 450px) {
button { button {
width: 25%; width: 25%;
} }
} }
</style> </style>

View File

@@ -1,58 +0,0 @@
<!-- <script>
export let checked = false;
</script>
<div class="toggle-container">
<span>Family Friendly</span>
<div
class="toggle-switch"
class:active={checked}
on:click={() => checked = !checked}
on:keypress={(e) => e.key === 'Enter' && (checked = !checked)}
role="switch"
aria-checked={checked}
tabindex="0"
>
<div class="toggle-slider"></div>
</div>
<span>Adult</span>
</div>
<style>
.toggle-container {
display: flex;
align-items: center;
gap: 10px;
justify-content: center;
margin: 10px 0;
}
.toggle-switch {
position: relative;
width: 50px;
height: 24px;
background: #ccc;
border-radius: 12px;
cursor: pointer;
transition: background 0.3s;
}
.toggle-switch.active {
background: #ff6b6b;
}
.toggle-slider {
position: absolute;
top: 2px;
left: 2px;
width: 20px;
height: 20px;
background: white;
border-radius: 50%;
transition: transform 0.3s;
}
.toggle-switch.active .toggle-slider {
transform: translateX(26px);
}
</style> -->

View File

@@ -2,15 +2,14 @@
font-family: 'Courier New', monospace; font-family: 'Courier New', monospace;
background: #0a0e27; background: #0a0e27;
color: #00ffff; color: #00ffff;
}
.theme-cyberpunk .window { .window {
background: rgba(10, 14, 39, 0.95); background: rgba(10, 14, 39, 0.95);
border: 2px solid #00ffff; border: 2px solid #00ffff;
box-shadow: 0 0 20px #ff00ff; box-shadow: 0 0 20px #ff00ff;
} }
.theme-cyberpunk .title-bar { .title-bar {
background: linear-gradient(90deg, #ff00ff, #00ffff); background: linear-gradient(90deg, #ff00ff, #00ffff);
color: #000; color: #000;
padding: 12px; padding: 12px;
@@ -18,124 +17,86 @@
text-transform: uppercase; text-transform: uppercase;
} }
.theme-cyberpunk fieldset { fieldset {
border: 1px solid #ff00ff; border: 1px solid #ff00ff;
} }
.theme-cyberpunk legend { legend {
color: #ff00ff; color: #ff00ff;
text-transform: uppercase; text-transform: uppercase;
} }
.theme-cyberpunk button { button {
background: transparent; background: transparent;
border: 2px solid #ff00ff; border: 2px solid #ff00ff;
color: #ff00ff; color: #ff00ff;
font-family: 'Courier New', monospace; font-family: 'Courier New', monospace;
text-transform: uppercase; text-transform: uppercase;
padding: 10px 25px; padding: 10px 25px;
} &:hover {
.theme-cyberpunk button:hover {
background: #ff00ff; background: #ff00ff;
color: #000; color: #000;
} }
}
.theme-cyberpunk .chart-display, .chart-display,
.theme-cyberpunk .dice-display { .dice-display {
background: rgba(0, 255, 255, 0.05); background: rgba(0, 255, 255, 0.05);
border: 1px solid #00ffff; border: 1px solid #00ffff;
} }
/* Home Page Styles */ .title {
.theme-cyberpunk .home-wrapper {
background: #0a0e27;
color: #00ffff;
}
.theme-cyberpunk .home-window {
background: rgba(10, 14, 39, 0.95);
border: 2px solid #00ffff;
box-shadow: 0 0 30px #ff00ff;
}
.theme-cyberpunk .home-title-bar {
background: linear-gradient(90deg, #ff00ff, #00ffff);
color: #000;
padding: 12px;
font-weight: bold;
text-transform: uppercase;
text-align: center;
letter-spacing: 3px;
}
.theme-cyberpunk .home-content {
background: rgba(10, 14, 39, 0.5);
}
.theme-cyberpunk .title {
color: #00ffff; color: #00ffff;
text-shadow: 0 0 20px #00ffff; text-shadow: 0 0 20px #00ffff;
} }
.theme-cyberpunk .subtitle { .subtitle {
color: #ff00ff; color: #ff00ff;
} }
.theme-cyberpunk .tab-button { .tab-button {
background: transparent; background: transparent;
border: 2px solid #ff00ff; border: 2px solid #ff00ff;
color: #ff00ff; color: #ff00ff;
text-transform: uppercase; text-transform: uppercase;
} &:hover {
.theme-cyberpunk .tab-button:hover {
background: #ff00ff; background: #ff00ff;
color: #000; color: #000;
box-shadow: 0 0 20px #ff00ff; box-shadow: 0 0 20px #ff00ff;
} }
/* Rules Page Styles */
.theme-cyberpunk .rules-wrapper {
background: #0a0e27;
color: #00ffff;
} }
.theme-cyberpunk .back-button { .back-button {
background: transparent; background: transparent;
border: 1px solid #ff00ff; border: 1px solid #ff00ff;
color: #ff00ff; color: #ff00ff;
} &:hover {
.theme-cyberpunk .back-button:hover {
background: #ff00ff; background: #ff00ff;
color: #000; color: #000;
} }
.theme-cyberpunk .rules-content {
color: #00ffff;
} }
.theme-cyberpunk h1 { h1 {
color: #00ffff; color: #00ffff;
text-shadow: 0 0 20px #00ffff; text-shadow: 0 0 20px #00ffff;
} }
.theme-cyberpunk h2 { h2 {
color: #ff00ff; color: #ff00ff;
text-shadow: 0 0 15px #ff00ff; text-shadow: 0 0 15px #ff00ff;
} }
.theme-cyberpunk h3 { h3 {
color: #00ffff; color: #00ffff;
} }
.theme-cyberpunk p, p,
.theme-cyberpunk li { li {
color: #00ffff; color: #00ffff;
} }
:global(.theme-cyberpunk) .point { .point {
fill: #ff00ff; fill: #ff00ff;
filter: drop-shadow(0 0 5px #ff00ff); filter: drop-shadow(0 0 5px #ff00ff);
} }
}

View File

@@ -1,87 +0,0 @@
/* Base styles that apply to all themes */
.container {
padding: 2rem;
}
.window {
max-width: 800px;
margin: 0 auto;
}
.window-body {
padding: 20px;
}
.title-bar {
display: flex;
align-items: center;
span{
text-align: center;
flex-grow: .75;
}
}
.home-button {
background: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(255, 255, 255, 0.3);
color: inherit;
padding: 5px 10px;
cursor: pointer;
border-radius: 4px;
font-size: 14px;
}
.home-button:hover {
background: rgba(255, 255, 255, 0.3);
}
fieldset {
padding: 15px;
margin: 15px 0;
}
legend {
font-weight: bold;
padding: 0 5px;
}
.button-row {
display: flex;
gap: 10px;
justify-content: center;
margin-top: 10px;
flex-wrap: wrap;
}
button {
padding: 8px 24px;
cursor: pointer;
font-weight: bold;
}
.chart-display,
.dice-display {
padding: 20px;
min-height: 120px;
margin: 15px 0;
}
.axis {
margin: 10px 0;
padding: 10px;
border: 1px solid currentColor;
opacity: 0.9;
}
.axis-label {
font-weight: bold;
margin-bottom: 5px;
font-size: 11px;
text-transform: uppercase;
}
.empty-state {
font-style: italic;
text-align: center;
opacity: 0.7;
}

View File

@@ -2,15 +2,14 @@
font-family: 'Georgia', serif; font-family: 'Georgia', serif;
background: #000000; background: #000000;
color: #8b0000; color: #8b0000;
}
.theme-nightmare .window { .window {
background: #0d0000; background: #0d0000;
border: 3px solid #8b0000; border: 3px solid #8b0000;
box-shadow: 0 0 30px #ff0000; box-shadow: 0 0 30px #ff0000;
} }
.theme-nightmare .title-bar { .title-bar {
background: linear-gradient(180deg, #3a0000, #000000); background: linear-gradient(180deg, #3a0000, #000000);
color: #ff0000; color: #ff0000;
padding: 15px; padding: 15px;
@@ -20,131 +19,95 @@
text-shadow: 0 0 10px #ff0000; text-shadow: 0 0 10px #ff0000;
} }
.theme-nightmare fieldset { fieldset {
border: 2px solid #8b0000; border: 2px solid #8b0000;
} }
.theme-nightmare legend { legend {
color: #ff0000; color: #ff0000;
text-shadow: 0 0 5px #ff0000; text-shadow: 0 0 5px #ff0000;
} }
.theme-nightmare button { button {
background: #3a0000; background: #3a0000;
border: 2px solid #8b0000; border: 2px solid #8b0000;
color: #ff0000; color: #ff0000;
font-family: 'Georgia', serif; font-family: 'Georgia', serif;
text-transform: uppercase; text-transform: uppercase;
padding: 10px 25px; padding: 10px 25px;
} &:hover {
.theme-nightmare button:hover {
background: #8b0000; background: #8b0000;
} }
}
.theme-nightmare .chart-display, .chart-display,
.theme-nightmare .dice-display { .dice-display {
background: #000000; background: #000000;
border: 2px solid #8b0000; border: 2px solid #8b0000;
} }
/* Home Page Styles */ .title {
.theme-nightmare .home-wrapper {
background: #000000;
color: #8b0000;
}
.theme-nightmare .home-window {
background: #0d0000;
border: 3px solid #8b0000;
box-shadow: 0 0 30px #ff0000;
}
.theme-nightmare .home-title-bar {
background: linear-gradient(180deg, #3a0000, #000000);
color: #ff0000;
padding: 15px;
text-align: center;
text-transform: uppercase;
letter-spacing: 5px;
text-shadow: 0 0 10px #ff0000;
font-family: 'Georgia', serif;
}
.theme-nightmare .home-content {
background: #0d0000;
font-family: 'Georgia', serif;
}
.theme-nightmare .title {
color: #ff0000; color: #ff0000;
text-shadow: 0 0 15px #ff0000; text-shadow: 0 0 15px #ff0000;
} }
.theme-nightmare .subtitle { .subtitle {
color: #cc0000; color: #cc0000;
text-shadow: 0 0 10px #cc0000; text-shadow: 0 0 10px #cc0000;
} }
.theme-nightmare .tab-button { .tab-button {
background: #3a0000; background: #3a0000;
border: 2px solid #8b0000; border: 2px solid #8b0000;
color: #ff0000; color: #ff0000;
font-family: 'Georgia', serif; font-family: 'Georgia', serif;
text-transform: uppercase; text-transform: uppercase;
} &:hover {
.theme-nightmare .tab-button:hover {
background: #8b0000; background: #8b0000;
box-shadow: 0 0 20px #ff0000; box-shadow: 0 0 20px #ff0000;
} }
/* Rules Page Styles */
.theme-nightmare .rules-wrapper {
background: #000000;
color: #8b0000;
} }
.theme-nightmare .back-button { .back-button {
background: #3a0000; background: #3a0000;
border: 2px solid #8b0000; border: 2px solid #8b0000;
color: #ff0000; color: #ff0000;
} &:hover {
.theme-nightmare .back-button:hover {
background: #8b0000; background: #8b0000;
box-shadow: 0 0 15px #ff0000; box-shadow: 0 0 15px #ff0000;
} }
}
.theme-nightmare .rules-content { .rules-content {
color: #8b0000; color: #8b0000;
font-family: 'Georgia', serif; font-family: 'Georgia', serif;
} }
.theme-nightmare h1 { h1 {
color: #ff0000; color: #ff0000;
text-shadow: 0 0 15px #ff0000; text-shadow: 0 0 15px #ff0000;
font-family: 'Georgia', serif; font-family: 'Georgia', serif;
} }
.theme-nightmare h2 { h2 {
color: #cc0000; color: #cc0000;
text-shadow: 0 0 10px #cc0000; text-shadow: 0 0 10px #cc0000;
font-family: 'Georgia', serif; font-family: 'Georgia', serif;
} }
.theme-nightmare h3 { h3 {
color: #ff0000; color: #ff0000;
font-family: 'Georgia', serif; font-family: 'Georgia', serif;
} }
.theme-nightmare p, p,
.theme-nightmare li { li {
color: #8b0000; color: #8b0000;
} }
:global(.theme-nightmare) .point { .point {
fill: #ff0000; fill: #ff0000;
stroke: #ff0000; stroke: #ff0000;
filter: drop-shadow(0 0 10px #ff0000); filter: drop-shadow(0 0 10px #ff0000);
} }
}

View File

@@ -2,9 +2,8 @@
font-family: 'Arial', sans-serif; font-family: 'Arial', sans-serif;
background: #e60012; background: #e60012;
color: #fff; color: #fff;
}
.theme-nintendo .window { .window {
background: #fff; background: #fff;
border: 8px solid #e60012; border: 8px solid #e60012;
border-radius: 20px; border-radius: 20px;
@@ -12,7 +11,7 @@
overflow: hidden; overflow: hidden;
} }
.theme-nintendo .title-bar { .title-bar {
background: #e60012; background: #e60012;
color: #fff; color: #fff;
padding: 20px; padding: 20px;
@@ -22,21 +21,18 @@
letter-spacing: 2px; letter-spacing: 2px;
} }
.theme-nintendo .window-body {
color: #484848;
}
.theme-nintendo fieldset { fieldset {
border: 3px solid #e60012; border: 3px solid #e60012;
border-radius: 15px; border-radius: 15px;
background: #f7f7f7; background: #f7f7f7;
} }
.theme-nintendo legend { legend {
color: #e60012; color: #e60012;
} }
.theme-nintendo button { button {
background: #e60012; background: #e60012;
border: none; border: none;
border-radius: 25px; border-radius: 25px;
@@ -44,128 +40,88 @@
text-transform: uppercase; text-transform: uppercase;
padding: 12px 30px; padding: 12px 30px;
box-shadow: 0 4px 0 #a00009; box-shadow: 0 4px 0 #a00009;
}
.theme-nintendo button:hover { &:hover {
background: #ff0018; background: #ff0018;
} }
.theme-nintendo button:active { &:active {
box-shadow: 0 2px 0 #a00009; box-shadow: 0 2px 0 #a00009;
transform: translateY(2px); transform: translateY(2px);
} }
}
.theme-nintendo .chart-display, .chart-display,
.theme-nintendo .dice-display { .dice-display {
background: #fff; background: #fff;
border: 3px solid #00a3e0; border: 3px solid #00a3e0;
border-radius: 10px; border-radius: 10px;
color: #484848; color: #484848;
} }
/* Home Page Styles */ .title {
.theme-nintendo .home-wrapper {
background: #e60012;
color: #fff;
}
.theme-nintendo .home-window {
background: #fff;
border: 8px solid #e60012;
border-radius: 20px;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
overflow: hidden;
}
.theme-nintendo .home-title-bar {
background: #e60012;
color: #fff;
padding: 20px;
text-align: center;
font-weight: bold;
font-size: 24px;
letter-spacing: 2px;
}
.theme-nintendo .home-content {
background: #fff;
color: #484848;
}
.theme-nintendo .title {
color: #e60012; color: #e60012;
} }
.theme-nintendo .subtitle { .subtitle {
color: #484848; color: #484848;
} }
.theme-nintendo .tab-button { .tab-button {
background: #e60012; background: #e60012;
border: none; border: none;
border-radius: 25px; border-radius: 25px;
color: #fff; color: #fff;
text-transform: uppercase; text-transform: uppercase;
box-shadow: 0 4px 0 #a00009; box-shadow: 0 4px 0 #a00009;
} &:hover {
.theme-nintendo .tab-button:hover {
background: #ff0018; background: #ff0018;
transform: translateY(-2px); transform: translateY(-2px);
} }
&:active {
.theme-nintendo .tab-button:active {
box-shadow: 0 2px 0 #a00009; box-shadow: 0 2px 0 #a00009;
transform: translateY(2px); transform: translateY(2px);
} }
/* Rules Page Styles */
.theme-nintendo .rules-wrapper {
background: #e60012;
color: #fff;
} }
.theme-nintendo .back-button { .back-button {
background: #e60012; background: #e60012;
border: none; border: none;
border-radius: 25px; border-radius: 25px;
color: #fff; color: #fff;
box-shadow: 0 4px 0 #a00009; box-shadow: 0 4px 0 #a00009;
padding: 8px 20px; padding: 8px 20px;
}
.theme-nintendo .back-button:hover { &:hover {
background: #ff0018; background: #ff0018;
transform: translateY(-2px); transform: translateY(-2px);
} }
.theme-nintendo .back-button:active { &:active {
box-shadow: 0 2px 0 #a00009; box-shadow: 0 2px 0 #a00009;
transform: translateY(2px); transform: translateY(2px);
} }
.theme-nintendo .rules-content {
color: #484848;
} }
.theme-nintendo h1 { h1 {
color: #e60012; color: #e60012;
} }
.theme-nintendo h2 { h2 {
color: #e60012; color: #e60012;
} }
.theme-nintendo h3 { h3 {
color: #00a3e0; color: #00a3e0;
} }
.theme-nintendo p, p,
.theme-nintendo li { li {
color: #484848; color: #484848;
} }
:global(.theme-nintendo) .point { .point {
fill: #e60012; fill: #e60012;
stroke: #e60012; stroke: #e60012;
} }
}

View File

@@ -2,15 +2,14 @@
font-family: 'Arial', sans-serif; font-family: 'Arial', sans-serif;
background: linear-gradient(180deg, #2a251a 0%, #3d372a 50%, #4a4235 100%); background: linear-gradient(180deg, #2a251a 0%, #3d372a 50%, #4a4235 100%);
color: #c4b896; color: #c4b896;
}
.theme-sludge .window { .window {
background: rgba(61, 55, 42, 0.95); background: rgba(61, 55, 42, 0.95);
border: 4px solid #8b8555; border: 4px solid #8b8555;
box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3), inset 0 2px 0 rgba(255, 255, 255, 0.1); box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3), inset 0 2px 0 rgba(255, 255, 255, 0.1);
} }
.theme-sludge .title-bar { .title-bar {
background: linear-gradient(180deg, #8b8555 0%, #6d6750 100%); background: linear-gradient(180deg, #8b8555 0%, #6d6750 100%);
color: #c4b896; color: #c4b896;
padding: 15px; padding: 15px;
@@ -21,13 +20,13 @@
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2);
} }
.theme-sludge fieldset { fieldset {
border: 3px solid #8b8555; border: 3px solid #8b8555;
background: rgba(58, 52, 38, 0.5); background: rgba(58, 52, 38, 0.5);
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2);
} }
.theme-sludge legend { legend {
color: #c4b896; color: #c4b896;
text-transform: uppercase; text-transform: uppercase;
background: #4a4235; background: #4a4235;
@@ -35,7 +34,7 @@
border: 2px solid #8b8555; border: 2px solid #8b8555;
} }
.theme-sludge button { button {
background: linear-gradient(180deg, #6d6750 0%, #5c5544 100%); background: linear-gradient(180deg, #6d6750 0%, #5c5544 100%);
border: 3px solid #8b8555; border: 3px solid #8b8555;
border-bottom-width: 5px; border-bottom-width: 5px;
@@ -43,117 +42,77 @@
text-transform: uppercase; text-transform: uppercase;
padding: 12px 30px; padding: 12px 30px;
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15); box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15);
} &:hover {
.theme-sludge button:hover {
background: linear-gradient(180deg, #7a7558 0%, #6d6750 100%); background: linear-gradient(180deg, #7a7558 0%, #6d6750 100%);
border-color: #9a9565; border-color: #9a9565;
} }
&:active {
.theme-sludge button:active {
border-bottom-width: 3px; border-bottom-width: 3px;
transform: translateY(2px); transform: translateY(2px);
} }
}
.theme-sludge .chart-display, .chart-display,
.theme-sludge .dice-display { .dice-display {
background: rgba(42, 37, 26, 0.8); background: rgba(42, 37, 26, 0.8);
border: 3px solid #8b8555; border: 3px solid #8b8555;
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3);
} }
/* Home Page */ .title {
.theme-sludge .home-wrapper {
background: linear-gradient(180deg, #2a251a 0%, #3d372a 50%, #4a4235 100%);
color: #c4b896; color: #c4b896;
} }
.theme-sludge .home-window { .subtitle {
background: rgba(61, 55, 42, 0.95);
border: 4px solid #8b8555;
box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3), inset 0 2px 0 rgba(255, 255, 255, 0.1);
}
.theme-sludge .home-title-bar {
background: linear-gradient(180deg, #8b8555 0%, #6d6750 100%);
color: #c4b896;
padding: 15px;
text-align: center;
text-transform: uppercase;
letter-spacing: 4px;
border-bottom: 3px solid rgba(0, 0, 0, 0.3);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.theme-sludge .home-content {
background: rgba(58, 52, 38, 0.3);
}
.theme-sludge .title {
color: #c4b896;
}
.theme-sludge .subtitle {
color: #aaa67d; color: #aaa67d;
} }
.theme-sludge .tab-button { .tab-button {
background: linear-gradient(180deg, #6d6750 0%, #5c5544 100%); background: linear-gradient(180deg, #6d6750 0%, #5c5544 100%);
border: 3px solid #8b8555; border: 3px solid #8b8555;
border-bottom-width: 5px; border-bottom-width: 5px;
color: #c4b896; color: #c4b896;
text-transform: uppercase; text-transform: uppercase;
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15); box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15);
} &:hover {
.theme-sludge .tab-button:hover {
background: linear-gradient(180deg, #7a7558 0%, #6d6750 100%); background: linear-gradient(180deg, #7a7558 0%, #6d6750 100%);
transform: translateY(-2px); transform: translateY(-2px);
border-color: #9a9565; border-color: #9a9565;
} }
/* Rules Page */
.theme-sludge .rules-wrapper {
background: linear-gradient(180deg, #2a251a 0%, #3d372a 50%, #4a4235 100%);
color: #c4b896;
} }
.theme-sludge .back-button { .back-button {
background: linear-gradient(180deg, #6d6750 0%, #5c5544 100%); background: linear-gradient(180deg, #6d6750 0%, #5c5544 100%);
border: 3px solid #8b8555; border: 3px solid #8b8555;
border-bottom-width: 5px; border-bottom-width: 5px;
color: #c4b896; color: #c4b896;
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15); box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15);
} &:hover {
.theme-sludge .back-button:hover {
background: linear-gradient(180deg, #7a7558 0%, #6d6750 100%); background: linear-gradient(180deg, #7a7558 0%, #6d6750 100%);
transform: translateY(-2px); transform: translateY(-2px);
} }
}
.theme-sludge .rules-content { h1 {
color: #c4b896; color: #c4b896;
} }
.theme-sludge h1 { h2 {
color: #c4b896;
}
.theme-sludge h2 {
color: #aaa67d; color: #aaa67d;
} }
.theme-sludge h3 { h3 {
color: #8b8555; color: #8b8555;
} }
.theme-sludge p, p,
.theme-sludge li { li {
color: #b5ad88; color: #b5ad88;
} }
:global(.theme-sludge) .point { .point {
fill: #b5ad88; fill: #b5ad88;
filter: drop-shadow(0 0 5px #b5ad88); filter: drop-shadow(0 0 5px #b5ad88);
stroke-width: 3; stroke-width: 3;
} }
}

View File

@@ -17,4 +17,3 @@ import './typewriter.css';
import './nightmare.css'; import './nightmare.css';
import './sludge.css'; import './sludge.css';
import './nintendo.css'; import './nintendo.css';
import './general.css';

View File

@@ -2,15 +2,14 @@
font-family: 'Courier', monospace; font-family: 'Courier', monospace;
background: #f4e8d0; background: #f4e8d0;
color: #2c2416; color: #2c2416;
}
.theme-typewriter .window { .window {
background: #fffef7; background: #fffef7;
border: 3px double #2c2416; border: 3px double #2c2416;
box-shadow: 5px 5px 15px rgba(0,0,0,0.3); box-shadow: 5px 5px 15px rgba(0,0,0,0.3);
} }
.theme-typewriter .title-bar { .title-bar {
background: #2c2416; background: #2c2416;
color: #f4e8d0; color: #f4e8d0;
padding: 12px; padding: 12px;
@@ -19,103 +18,69 @@
letter-spacing: 3px; letter-spacing: 3px;
} }
.theme-typewriter fieldset { fieldset {
border: 2px solid #2c2416; border: 2px solid #2c2416;
} }
.theme-typewriter legend { legend {
font-weight: bold; font-weight: bold;
text-decoration: underline; text-decoration: underline;
} }
.theme-typewriter button { button {
background: #2c2416; background: #2c2416;
border: 2px solid #2c2416; border: 2px solid #2c2416;
color: #f4e8d0; color: #f4e8d0;
font-family: 'Courier', monospace; font-family: 'Courier', monospace;
} }
.theme-typewriter .chart-display, .chart-display,
.theme-typewriter .dice-display { .dice-display {
background: #fffef7; background: #fffef7;
border: 1px solid #2c2416; border: 1px solid #2c2416;
} }
/* Home Page Styles */ .home-content {
.theme-typewriter .home-wrapper {
background: #f4e8d0;
color: #2c2416;
}
.theme-typewriter .home-window {
background: #fffef7;
border: 3px double #2c2416;
box-shadow: 5px 5px 15px rgba(0,0,0,0.3);
}
.theme-typewriter .home-title-bar {
background: #2c2416;
color: #f4e8d0;
padding: 12px;
text-align: center;
text-transform: uppercase;
letter-spacing: 3px;
font-family: 'Courier', monospace;
}
.theme-typewriter .home-content {
background: #fffef7; background: #fffef7;
font-family: 'Courier', monospace; font-family: 'Courier', monospace;
} }
.theme-typewriter .title { .title {
color: #2c2416; color: #2c2416;
} }
.theme-typewriter .subtitle { .subtitle {
color: #4a3a28; color: #4a3a28;
} }
.theme-typewriter .tab-button { .tab-button {
background: #2c2416; background: #2c2416;
border: 2px solid #2c2416; border: 2px solid #2c2416;
color: #f4e8d0; color: #f4e8d0;
font-family: 'Courier', monospace; font-family: 'Courier', monospace;
} &:hover {
.theme-typewriter .tab-button:hover {
background: #4a3a28; background: #4a3a28;
} }
/* Rules Page Styles */
.theme-typewriter .rules-wrapper {
background: #f4e8d0;
color: #2c2416;
} }
.theme-typewriter .back-button { .back-button {
background: #2c2416; background: #2c2416;
color: #f4e8d0; color: #f4e8d0;
border: 2px solid #2c2416; border: 2px solid #2c2416;
} &:hover {
.theme-typewriter .back-button:hover {
background: #4a3a28; background: #4a3a28;
} }
}
.theme-typewriter .rules-content { h1,
h2,
h3 {
color: #2c2416; color: #2c2416;
font-family: 'Courier', monospace; font-family: 'Courier', monospace;
} }
.theme-typewriter h1, .point {
.theme-typewriter h2,
.theme-typewriter h3 {
color: #2c2416;
font-family: 'Courier', monospace;
}
:global(.theme-typewriter) .point {
fill: #2c2416; fill: #2c2416;
stroke: #2c2416; stroke: #2c2416;
} }
}

View File

@@ -1,111 +1,73 @@
.theme-win95 { .theme-win95 {
font-family: 'MS Sans Serif', Arial, sans-serif; font-family: 'MS Sans Serif', Arial, sans-serif;
background: #008080; background: #008080;
} .window {
.theme-win95 .window {
background: #c0c0c0; background: #c0c0c0;
border: 2px solid; border: 2px solid;
border-color: #dfdfdf #808080 #808080 #dfdfdf; border-color: #dfdfdf #808080 #808080 #dfdfdf;
box-shadow: 2px 2px 0 rgba(0,0,0,0.5); box-shadow: 2px 2px 0 rgba(0,0,0,0.5);
} }
.theme-win95 .title-bar { .title-bar {
background: linear-gradient(to right, #000080, #1084d0); background: linear-gradient(to right, #000080, #1084d0);
color: white; color: white;
padding: 8px; padding: 8px;
font-weight: bold; font-weight: bold;
} }
.theme-win95 fieldset { fieldset {
border: 2px groove #c0c0c0; border: 2px groove #c0c0c0;
} }
.theme-win95 button { button {
background: #c0c0c0; background: #c0c0c0;
border: 2px solid; border: 2px solid;
border-color: #ffffff #000000 #000000 #ffffff; border-color: #ffffff #000000 #000000 #ffffff;
font-family: 'MS Sans Serif', Arial, sans-serif; font-family: 'MS Sans Serif', Arial, sans-serif;
} &:active {
.theme-win95 button:active {
border-color: #000000 #ffffff #ffffff #000000; border-color: #000000 #ffffff #ffffff #000000;
} }
}
.theme-win95 .chart-display, .chart-display,
.theme-win95 .dice-display { .dice-display {
background: white; background: white;
border: 2px inset #808080; border: 2px inset #808080;
} }
/* Home Page Styles */ .tab-button {
.theme-win95 .home-wrapper {
background: #008080;
}
.theme-win95 .home-window {
background: #c0c0c0;
border: 2px solid;
border-color: #dfdfdf #808080 #808080 #dfdfdf;
box-shadow: 2px 2px 0 rgba(0,0,0,0.5);
}
.theme-win95 .home-title-bar {
background: linear-gradient(to right, #000080, #1084d0);
color: white;
padding: 8px;
font-weight: bold;
text-align: center;
}
.theme-win95 .home-content {
background: #c0c0c0;
color: #000;
}
.theme-win95 .tab-button {
background: #c0c0c0; background: #c0c0c0;
border: 2px solid; border: 2px solid;
border-color: #ffffff #000000 #000000 #ffffff; border-color: #ffffff #000000 #000000 #ffffff;
color: #000; color: #000;
} }
.theme-win95 .tab-button:hover { .tab-button:hover {
background: #dfdfdf; background: #dfdfdf;
} }
.theme-win95 .tab-button:active { .tab-button:active {
border-color: #000000 #ffffff #ffffff #000000; border-color: #000000 #ffffff #ffffff #000000;
} }
/* Rules Page Styles */ .back-button {
.theme-win95 .rules-wrapper {
background: #008080;
}
.theme-win95 .back-button {
background: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(255, 255, 255, 0.3); border: 1px solid rgba(255, 255, 255, 0.3);
} }
.theme-win95 .back-button:hover { .back-button:hover {
background: rgba(255, 255, 255, 0.3); background: rgba(255, 255, 255, 0.3);
} }
h1,
.theme-win95 .rules-content { h2 {
color: #000;
}
.theme-win95 h1,
.theme-win95 h2 {
color: #000080; color: #000080;
} }
.theme-win95 h3 { h3 {
color: #1084d0; color: #1084d0;
} }
:global(.theme-win95) .point { .point {
fill: #000080; fill: #000080;
stroke: #000080; stroke: #000080;
} }
}

View File

@@ -2,7 +2,7 @@
import '$lib/styles/themes.js'; import '$lib/styles/themes.js';
import { writable } from 'svelte/store'; import { writable } from 'svelte/store';
import { setContext } from 'svelte'; import { setContext } from 'svelte';
import { page } from '$app/state';
// Create a theme store that persists across pages // Create a theme store that persists across pages
const theme = writable('win95'); const theme = writable('win95');
setContext('theme', theme); setContext('theme', theme);
@@ -13,25 +13,19 @@
}); });
</script> </script>
<div class="app-container theme-{currentTheme}"> <div class="theme-{currentTheme} app-container">
<div class="wrapper">
<div class="container">
<div class="window"> <div class="window">
<div class="title-bar"> <div class="title-bar">
{#if page.url.pathname != '/'}
<a href="/" class="back-button">←Back</a> <a href="/" class="back-button">←Back</a>
<span>A Sludge & Friends game</span> {/if}
<span>A Sludge & Friends Game</span>
</div> </div>
<slot /> <slot />
</div> </div>
</div> </div>
</div>
</div>
<style> <style>
:global(body) {
margin: 0;
padding: 0;
}
.back-button { .back-button {
padding: 5px 15px; padding: 5px 15px;
cursor: pointer; cursor: pointer;
@@ -41,24 +35,79 @@
font-weight: bold; font-weight: bold;
transition: all 0.2s; transition: all 0.2s;
} }
.wrapper {
.app-container {
min-height: 100vh; min-height: 100vh;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 20px; padding: 0.25rem;
}
.container {
width: 100%;
max-width: 700px;
} }
.window { .window {
max-width: 55rem;
width: 100%; width: 100%;
margin: 0 auto;
} }
.title-bar {
display: flex;
align-items: center;
span {
text-align: center;
flex-grow: 0.75;
}
}
@media screen and (min-width: 450px) {
.app-container { .app-container {
padding: 2rem;
}
}
:global {
body {
margin: 0;
padding: 0;
min-height: 100vh; min-height: 100vh;
} }
fieldset {
padding: 15px;
margin: 15px 0;
}
legend {
font-weight: bold;
padding: 0 5px;
}
.button-row {
display: flex;
gap: 10px;
justify-content: center;
margin-top: 10px;
flex-wrap: wrap;
}
button {
padding: 8px 24px;
cursor: pointer;
font-weight: bold;
}
.chart-display,
.dice-display {
padding: 20px;
min-height: 120px;
margin: 15px 0;
}
.empty-state {
font-style: italic;
text-align: center;
opacity: 0.7;
}
}
</style> </style>

View File

@@ -8,6 +8,9 @@
$: themeStore.set(currentTheme); $: themeStore.set(currentTheme);
</script> </script>
<svelte:head>
<title>On the Spectrum</title>
</svelte:head>
<div class="home-content"> <div class="home-content">
<h1 class="title">On the Spectrum!</h1> <h1 class="title">On the Spectrum!</h1>
<p class="subtitle">Well.. are ya?</p> <p class="subtitle">Well.. are ya?</p>

View File

@@ -28,6 +28,10 @@
} }
</script> </script>
<svelte:head>
<title>Play On the Spectrum</title>
</svelte:head>
<div class="container"> <div class="container">
<fieldset> <fieldset>
<legend>Chart Generator</legend> <legend>Chart Generator</legend>
@@ -36,7 +40,6 @@
<button onclick={generateChart}>Generate</button> <button onclick={generateChart}>Generate</button>
</div> </div>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>Position Roller</legend> <legend>Position Roller</legend>
<DiceRoller roll={diceRoll} /> <DiceRoller roll={diceRoll} />
@@ -70,4 +73,3 @@
font-weight: bold; font-weight: bold;
} }
</style> </style>

View File

@@ -8,6 +8,10 @@
$: themeStore.set(currentTheme); $: themeStore.set(currentTheme);
</script> </script>
<svelte:head>
<title>Rules For On the Spectrum</title>
</svelte:head>
<div class="window-body"> <div class="window-body">
<div class="rules-content"> <div class="rules-content">
<h1>How to Play</h1> <h1>How to Play</h1>
@@ -19,10 +23,13 @@
<strong>Generate:</strong> Click "Generate" to create a random 2D spectrum with X and Y axes <strong>Generate:</strong> Click "Generate" to create a random 2D spectrum with X and Y axes
</li> </li>
<li> <li>
<strong>Roll:</strong> Have the clue-giver roll 2d10 with one d10 being X and the other d10 being Y (The axes run 1-10 with 5 being the centerline on each). Try to select a phrase-person-vibe that fits the X,Y coordinates you just rolled and inform the other players. <strong>Roll:</strong> Have the clue-giver roll 2d10 with one d10 being X and the other d10
being Y (The axes run 1-10 with 5 being the centerline on each). Try to select a phrase-person-vibe
that fits the X,Y coordinates you just rolled and inform the other players.
</li> </li>
<li> <li>
<strong>Guess:</strong> Guessers now argue about where the clue should be situated on the quadrant plot. They guess some coordinates and the clue giver reveals where the clue was. <strong>Guess:</strong> Guessers now argue about where the clue should be situated on the quadrant
plot. They guess some coordinates and the clue giver reveals where the clue was.
</li> </li>
<li><strong>Repeat:</strong> Generate a new spectrum and keep playing!</li> <li><strong>Repeat:</strong> Generate a new spectrum and keep playing!</li>
</ol> </ol>
@@ -79,11 +86,6 @@
Hundreds! The X and Y axes are randomly combined, creating thousands of possible spectrums. Hundreds! The X and Y axes are randomly combined, creating thousands of possible spectrums.
</p> </p>
<p>
<strong>What if I'm perfectly neutral?</strong><br />
Mark yourself at 5 or 6 on that axis. True neutrality is rare and interesting!
</p>
<p> <p>
<strong>Can we make our own rules?</strong><br /> <strong>Can we make our own rules?</strong><br />
Absolutely! These are guidelines. House rules are encouraged! Absolutely! These are guidelines. House rules are encouraged!
@@ -98,7 +100,10 @@
<style> <style>
.rules-content { .rules-content {
padding: 0px 0; margin: 0.5rem;
display: flex;
flex-direction: column;
align-items: center;
} }
h1 { h1 {
@@ -108,17 +113,15 @@
} }
h2 { h2 {
font-size: 1.8rem;
margin-top: 30px; margin-top: 30px;
margin-bottom: 15px; margin-bottom: 15px;
} }
section { section {
margin-bottom: 30px; width: 95%;
} }
p { p {
line-height: 1.6;
margin-bottom: 10px; margin-bottom: 10px;
} }