From b2fc199856b8c01f98494961ced7e1f9c5718725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jok=C5=ABbas=20Banaitis?= Date: Wed, 13 May 2026 13:57:24 +0300 Subject: [PATCH 1/6] Reorganize styles structure --- src/app.css | 305 ++------------------------------- src/lib/styles/layout.css | 218 +++++++++++++++++++++++ src/lib/styles/theme.css | 150 ++++++++++++++++ src/lib/styles/themes/dark.css | 15 ++ src/lib/styles/tokens.css | 45 +++++ src/routes/+layout.svelte | 121 ++++--------- 6 files changed, 478 insertions(+), 376 deletions(-) create mode 100644 src/lib/styles/layout.css create mode 100644 src/lib/styles/theme.css create mode 100644 src/lib/styles/themes/dark.css create mode 100644 src/lib/styles/tokens.css diff --git a/src/app.css b/src/app.css index ea1966e..2bdf7d2 100644 --- a/src/app.css +++ b/src/app.css @@ -1,295 +1,18 @@ -@import "@fontsource/courier-prime"; -@import "@fontsource/fira-mono"; +/* ─── app.css ──────────────────────────────────────────────────────────────── + Entry point. Import order matters: + 1. tokens — variables must exist before anything references them + 2. themes — overrides must come after token defaults + 3. layout — structure (references tokens for sizing vars) + 4. theme — visuals (references tokens for all color/font values) -:root { - --font-body: "Fira Mono", "Courier New", "Courier Prime", monospace; - --font-mono: "Fira Mono", "Courier Prime", monospace; - --color-bg: #040204; - --column-width: 42rem; - --column-margin-top: 4rem; - font-family: var(--font-body); - color: var(--color-text); -} + To add a new theme, create src/lib/styles/themes/yourtheme.css + and add an @import here. Apply it with . +─────────────────────────────────────────────────────────────────────────────── */ -body { - color: var(--color-text); - min-height: 100vh; - margin: 0; - background: var(--color-bg); -} +@import "$lib/styles/tokens.css"; -h1, -h2, -p { - font-weight: 400; - line-height: 1.5; - word-break: break-word; -} +/* Themes */ +@import "$lib/styles/themes/dark.css"; -h2.title { - margin-bottom: 0.25em; -} - -a { - color: var(--link-color); - text-decoration: none; -} - -a:has(> strong) { - color: var(--color-text-2); -} - -a:hover:not(:has(img)) { - background: var(--color-text-2); - color: var(--link-hover-color); - text-decoration: none; -} - -p a { - text-decoration: underline; - text-underline-offset: 3px; -} - -h1 { - font-size: 2rem; - text-align: center; - margin: 0 0 0.5em 0; -} - -h2 { - font-size: 1.25rem; - margin-top: 0; -} - -h3 { - font-size: 1rem; - overflow-wrap: anywhere; -} - -hr { - margin-left: 0px; - width: 15rem; -} - -pre { - font-size: 16px; - font-family: var(--font-mono); - background-color: rgba(20, 20, 20, 0.45); - border-radius: 3px; - box-shadow: 2px 2px 6px rgba(20, 20, 20, 0.25); - padding: 0.5em; - overflow-x: auto; - color: var(--color-text-2); -} - -.inline { - display: inline; -} - -input { - font-size: inherit; - font-family: inherit; - color: var(--color-text); - accent-color: var(--color-text-2); -} - -button { - font-size: inherit; - font-family: inherit; - color: var(--color-text-2); - text-decoration: none; - border: none; - background-color: rgba(0, 0, 0, 0); - cursor: pointer; -} - -button:hover { - background: var(--color-text-2); - color: var(--color-bg); - text-decoration: none; -} - -button:focus:not(:focus-visible) { - outline: none; -} - -@media (min-width: 780px) { - h1 { - font-size: 2.4rem; - } -} - -strong { - color: var(--color-text-2); - font-weight: 700; -} - -div.actions { - display: flex; - margin-bottom: 0.5em; - gap: 0.5em; -} - -div.actions form { - margin-bottom: 0; -} - -.post.action:hover { - color: var(--color-text-2); -} - -a:hover strong { - background: var(--color-text-2); - color: var(--link-hover-color); - text-decoration: none; -} - -.dim { - color: var(--color-text-3); -} - -hr { - border-color: var(--color-text-2); - color: var(--color-text-2); -} - -.post.action { - color: var(--color-text); - border: none; - background-color: rgba(0, 0, 0, 0); - cursor: pointer; -} - -label { - display: block; - margin-top: 1em; -} - -form { - margin-bottom: 2em; -} - -form input { - margin-top: 0.83em; - margin-bottom: 0.5em; - background-color: #1c1c1c; - border: 1px solid rgba(255, 255, 255, 0.075); - border-radius: 3px; - color: var(--form-text-color); - font-weight: 400; - font-size: 1rem; - padding: 12px 10px; -} - -::selection { - color: var(--link-hover-color); - background: var(--color-text-2); -} - -form input:focus { - border: 1px solid var(--form-border-color); - outline: none; -} - -form textarea { - margin-top: 0.83em; - margin-bottom: 0.5em; - background-color: #1c1c1c; - border: 1px solid rgba(255, 255, 255, 0.075); - border-radius: 3px; - color: var(--form-text-color); - font-weight: 400; - font-size: 1rem; - padding: 12px 10px; - max-width: 25em; - min-width: 12.5em; - width: 40vw; - height: 10rem; -} - -form textarea:focus { - border: 1px solid var(--form-border-color); - outline: none; -} - -ul { - list-style: square; - padding-left: 1.5em; -} - -post div.content img { - max-width: 100%; - border-radius: 10px; - margin-bottom: 1em; - max-height: 65vh; -} - -event div.event-description img { - max-width: 100%; - border-radius: 10px; - margin-bottom: 1em; - max-height: 65vh; -} - -event div.event-description p { - margin-bottom: 0; - margin-top: 0; -} - -.font-size-small { - font-size: 0.8em; - font-weight: 200; -} - -iframe { - max-width: 100%; -} - -.opaque { - opacity: 0; - cursor: default; -} - -div.meta-info { - display: flex; - flex-direction: row; - gap: 1.5em; -} - -hr.long { - width: 100%; - color: rgba(255, 255, 255, 0.1); - border-color: rgba(255, 255, 255, 0.1); - margin-top: 2em; - margin-bottom: 2em; -} - -ul.item-list { - padding-left: 0; -} - -ul.item-list li { - list-style: none; - margin-bottom: 2em; -} - -div.center-block { - margin: 2em; - display: flex; - justify-content: center; -} - -div.text-block { - margin-bottom: 1em; -} - -p.align-right { - text-align: right; -} - -.lucide { - vertical-align: text-bottom; - max-width: 1.25em; - max-height: 1.25em; - align-self: center; -} +@import "$lib/styles/layout.css"; +@import "$lib/styles/theme.css"; diff --git a/src/lib/styles/layout.css b/src/lib/styles/layout.css new file mode 100644 index 0000000..e041070 --- /dev/null +++ b/src/lib/styles/layout.css @@ -0,0 +1,218 @@ +/* + Structural rules only: display, spacing, sizing, positioning. + No color values. No font-family. No box-shadow. + All visual properties live in theme.css. +*/ + +/* Base */ + +body { + min-height: 100vh; + margin: 0; +} + +/* Typography */ + +h1, +h2, +p { + font-weight: 400; + line-height: 1.5; + word-break: break-word; +} + +h1 { + font-size: 2rem; + text-align: center; + margin: 0 0 0.5em 0; +} + +h2 { + font-size: 1.25rem; + margin-top: 0; +} + +h2.title { + margin-bottom: 0.25em; +} + +h3 { + font-size: 1rem; + overflow-wrap: anywhere; +} + +strong { + font-weight: 700; +} + +@media (min-width: 780px) { + h1 { + font-size: 2.4rem; + } +} + +/* Links */ + +p a { + text-underline-offset: 3px; +} + +/* Buttons */ + +button { + font-size: inherit; + font-family: inherit; + border: none; + cursor: pointer; + text-decoration: none; +} + +button:focus:not(:focus-visible) { + outline: none; +} + +/* Forms */ + +label { + display: block; + margin-top: 1em; +} + +form { + margin-bottom: 2em; +} + +div.actions form { + margin-bottom: 0; +} + +input { + font-size: inherit; + font-family: inherit; +} + +form input:not([type="checkbox"]):not([type="radio"]), +form textarea { + display: block; + margin-top: 0.83em; + margin-bottom: 0.5em; + font-family: inherit; + font-size: 1rem; + font-weight: 400; + padding: 12px 10px; + border-radius: 3px; + border-width: 1px; + border-style: solid; +} + +form input:focus, +form textarea:focus { + outline: none; +} + +form textarea { + max-width: 25em; + min-width: 12.5em; + width: 40vw; + height: 10rem; +} + +/* Misc Elements */ + +hr { + margin-left: 0; + width: 15rem; +} + +hr.long { + width: 100%; + margin-top: 2em; + margin-bottom: 2em; +} + +pre { + font-size: 16px; + padding: 0.5em; + overflow-x: auto; + border-radius: 3px; +} + +ul { + padding-left: 1.5em; +} + +ul.item-list { + padding-left: 0; +} + +ul.item-list li { + list-style: none; + margin-bottom: 2em; +} + +iframe { + max-width: 100%; +} + +/* Rich Content */ + +post div.content img, +event div.event-description img { + max-width: 100%; + max-height: 65vh; + margin-bottom: 1em; +} + +event div.event-description p { + margin-top: 0; + margin-bottom: 0; +} + +/* Utility */ + +.inline { + display: inline; +} + +.opaque { + opacity: 0; + cursor: default; +} + +.font-size-small { + font-size: 0.8em; + font-weight: 200; +} + +.lucide { + vertical-align: text-bottom; + max-width: 1.25em; + max-height: 1.25em; + align-self: center; +} + +div.actions { + display: flex; + gap: 0.5em; + margin-bottom: 0.5em; +} + +div.meta-info { + display: flex; + flex-direction: row; + gap: 1.5em; +} + +div.center-block { + display: flex; + justify-content: center; + margin: 2em; +} + +div.text-block { + margin-bottom: 1em; +} + +p.align-right { + text-align: right; +} diff --git a/src/lib/styles/theme.css b/src/lib/styles/theme.css new file mode 100644 index 0000000..b79ec09 --- /dev/null +++ b/src/lib/styles/theme.css @@ -0,0 +1,150 @@ +/* theme.css + Visual styles only: color, background, border, shadow, font-family, + border-radius, text-decoration, opacity, transition. + Zero hardcoded values — everything references a token from tokens.css. + This file should read identically regardless of which theme is active. +*/ + +/* Base */ + +body { + font-family: var(--font-body); + color: var(--color-text); + background: var(--color-bg); +} + +/* Typography */ + +strong { + color: var(--color-text-2); +} + +/* Links */ + +a { + color: var(--link-color); + text-decoration: none; +} + +a:has(> strong) { + color: var(--color-text-2); +} + +a:hover:not(:has(img)) { + background: var(--color-text-2); + color: var(--link-hover-color); +} + +a:hover strong { + background: var(--color-text-2); + color: var(--link-hover-color); +} + +p a { + text-decoration: underline; +} + +/* Buttons */ + +button { + color: var(--color-text-2); + background-color: transparent; +} + +button:hover { + background: var(--color-text-2); + color: var(--color-bg); +} + +/* Forms */ + +input { + color: var(--color-text); + accent-color: var(--color-text-2); +} + +form input:not([type="checkbox"]):not([type="radio"]), +form textarea { + background-color: var(--form-bg-color); + border-color: var(--form-border-subtle); + color: var(--form-text-color); +} + +form input:not([type="checkbox"]):not([type="radio"]):focus, +form textarea:focus { + border-color: var(--form-border-color); +} + +::selection { + color: var(--link-hover-color); + background: var(--color-text-2); +} + +/* Misc Elements */ + +hr { + border-color: var(--color-text-2); + color: var(--color-text-2); +} + +hr.long { + border-color: var(--border-subtle); + color: var(--border-subtle); +} + +pre { + font-family: var(--font-mono); + color: var(--color-text-2); + background-color: var(--pre-bg); + box-shadow: 2px 2px 6px var(--pre-shadow); +} + +ul { + list-style: square; +} + +/* Rich Content */ + +post div.content img, +event div.event-description img { + border-radius: 10px; +} + +/* Utility */ + +.dim { + color: var(--color-text-3); +} + +/* Post Actions */ + +.post.action { + color: var(--color-text); + background-color: transparent; + border: none; + cursor: pointer; +} + +.post.action:hover { + color: var(--color-text-2); +} + +/* Third-party Date Picker */ + +.date-time-field input { + width: 16rem; + margin-top: 0.83em !important; + margin-bottom: 0.83em !important; + font-weight: 400 !important; + font-size: 1rem !important; + padding: 12px 10px !important; + border: 1px solid var(--form-border-subtle) !important; +} + +.date-time-field input:focus { + border-color: var(--form-border-color) !important; +} + +.date-time-field select { + background-color: var(--date-picker-background) !important; +} diff --git a/src/lib/styles/themes/dark.css b/src/lib/styles/themes/dark.css new file mode 100644 index 0000000..c6347a1 --- /dev/null +++ b/src/lib/styles/themes/dark.css @@ -0,0 +1,15 @@ +/* + Dark theme token overrides. + Apply by adding class="dark" to . + Only redefines tokens that differ from the default (light) theme. + */ + +html.dark { + --color-text: #090; + --color-text-2: #0f0; + --color-text-3: #050; + --link-color: var(--color-text-2); + --link-hover-color: var(--color-bg); + --form-border-color: var(--color-text-2); + --form-text-color: var(--color-text-2); +} diff --git a/src/lib/styles/tokens.css b/src/lib/styles/tokens.css new file mode 100644 index 0000000..32eb428 --- /dev/null +++ b/src/lib/styles/tokens.css @@ -0,0 +1,45 @@ +@import "@fontsource/courier-prime"; +@import "@fontsource/fira-mono"; + +/* + Single source of truth for all design tokens. + Light theme values are the default. + Each theme file (themes/*.css) overrides only what changes. +*/ + +:root { + /* Typography */ + --font-body: "Fira Mono", "Courier New", "Courier Prime", monospace; + --font-mono: "Fira Mono", "Courier Prime", monospace; + + /* Layout */ + --column-width: 42rem; + --column-margin-top: 4rem; + + /* Base colors */ + --color-bg: #040204; + --color-text: #ffff80; + --color-text-2: #af1a1a; + --color-text-3: #315563; + + /* Semantic tokens, components reference these, not base colors */ + --link-color: var(--color-text); + --link-hover-color: var(--color-text); + --form-border-color: var(--color-text-2); + --form-text-color: var(--color-text); + --form-bg-color: #1c1c1c; + --form-border-subtle: rgba(255, 255, 255, 0.075); + --border-subtle: rgba(255, 255, 255, 0.075); + --pre-bg: rgba(20, 20, 20, 0.45); + --pre-shadow: rgba(20, 20, 20, 0.25); + + /* Third-party date picker */ + --date-picker-foreground: var(--form-text-color); + --date-picker-background: var(--form-bg-color); + --date-picker-highlight-border: var(--form-border-color); + --date-picker-border-color: var(--form-border-subtle); + --date-picker-highlight-shadow: none; + --date-picker-selected-color: var(--link-hover-color); + --date-picker-selected-background: var(--color-text-2); + --date-input-width: fit-content; +} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 4d970a3..7d73d7b 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -65,25 +65,7 @@ From b6f71da8c3ce9340f4e2f9d34c96374c9449ffdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jok=C5=ABbas=20Banaitis?= Date: Wed, 13 May 2026 18:20:30 +0300 Subject: [PATCH 2/6] Add a toggleable VGUI theme --- src/app.css | 1 + src/lib/components/common/ThemeToggle.svelte | 45 +- .../components/common/TrackAppearance.svelte | 47 +- src/lib/stores/theme.ts | 5 + src/lib/styles/themes/greensteam.css | 661 ++++++++++++++++++ src/routes/about/+page.svelte | 388 +++++----- src/routes/contacts/+page.svelte | 69 +- src/routes/crew/login/+page.svelte | 32 +- src/routes/xi20-guidelines/+page.svelte | 32 +- static/styles/greensteam/checkmark.png | Bin 0 -> 308 bytes static/styles/greensteam/close.png | Bin 0 -> 2902 bytes static/styles/greensteam/close2.png | Bin 0 -> 1270 bytes static/styles/greensteam/minimize.png | Bin 0 -> 2849 bytes static/styles/greensteam/minimize2.png | Bin 0 -> 1234 bytes static/styles/greensteam/radio_off.png | Bin 0 -> 568 bytes static/styles/greensteam/radio_on.png | Bin 0 -> 687 bytes static/styles/greensteam/resize.png | Bin 0 -> 2860 bytes static/styles/greensteam/scroll_down.png | Bin 0 -> 213 bytes static/styles/greensteam/scroll_left.png | Bin 0 -> 207 bytes static/styles/greensteam/scroll_right.png | Bin 0 -> 209 bytes static/styles/greensteam/scroll_up.png | Bin 0 -> 207 bytes static/styles/greensteam/sliderticks.png | Bin 0 -> 133 bytes static/styles/greensteam/steamico.png | Bin 0 -> 3180 bytes 23 files changed, 985 insertions(+), 295 deletions(-) create mode 100644 src/lib/stores/theme.ts create mode 100644 src/lib/styles/themes/greensteam.css create mode 100644 static/styles/greensteam/checkmark.png create mode 100644 static/styles/greensteam/close.png create mode 100644 static/styles/greensteam/close2.png create mode 100644 static/styles/greensteam/minimize.png create mode 100644 static/styles/greensteam/minimize2.png create mode 100644 static/styles/greensteam/radio_off.png create mode 100644 static/styles/greensteam/radio_on.png create mode 100644 static/styles/greensteam/resize.png create mode 100644 static/styles/greensteam/scroll_down.png create mode 100644 static/styles/greensteam/scroll_left.png create mode 100644 static/styles/greensteam/scroll_right.png create mode 100644 static/styles/greensteam/scroll_up.png create mode 100644 static/styles/greensteam/sliderticks.png create mode 100644 static/styles/greensteam/steamico.png diff --git a/src/app.css b/src/app.css index 2bdf7d2..8744adc 100644 --- a/src/app.css +++ b/src/app.css @@ -13,6 +13,7 @@ /* Themes */ @import "$lib/styles/themes/dark.css"; +@import "$lib/styles/themes/greensteam.css"; @import "$lib/styles/layout.css"; @import "$lib/styles/theme.css"; diff --git a/src/lib/components/common/ThemeToggle.svelte b/src/lib/components/common/ThemeToggle.svelte index ca004a0..2007c1b 100644 --- a/src/lib/components/common/ThemeToggle.svelte +++ b/src/lib/components/common/ThemeToggle.svelte @@ -1,21 +1,34 @@ - -{#if appearance.dark !== null} - -{/if} + + diff --git a/src/lib/components/common/TrackAppearance.svelte b/src/lib/components/common/TrackAppearance.svelte index 2d4863a..9860334 100644 --- a/src/lib/components/common/TrackAppearance.svelte +++ b/src/lib/components/common/TrackAppearance.svelte @@ -1,30 +1,29 @@ diff --git a/src/lib/stores/theme.ts b/src/lib/stores/theme.ts new file mode 100644 index 0000000..3e6a2b8 --- /dev/null +++ b/src/lib/stores/theme.ts @@ -0,0 +1,5 @@ +import { writable } from "svelte/store"; + +export type ThemeMode = "light" | "dark" | "greensteam"; + +export const theme = writable("light"); diff --git a/src/lib/styles/themes/greensteam.css b/src/lib/styles/themes/greensteam.css new file mode 100644 index 0000000..fbe2920 --- /dev/null +++ b/src/lib/styles/themes/greensteam.css @@ -0,0 +1,661 @@ +/* + Green Steam theme — a recreation of the early Steam UI aesthetic. + Original: https://github.com/leonill007/vgui.css +*/ + +/* Token Overrides */ + +html.greensteam { + --font-body: "Trebuchet MS", "Verdana", sans-serif; + + --color-bg: #3e4637; + --color-text: #d8ded3; + --color-text-2: #c4b550; /* headings, nav links */ + --color-text-3: #899281; /* muted / .dim */ + + --link-color: #aaaaaa; + --link-hover-color: #d8ded3; + + --form-bg-color: #3e4637; + --form-border-color: #899281; + --form-border-subtle: #292d23; + --border-subtle: rgba(255, 255, 255, 0.075); + + --pre-bg: #3e4637; + --pre-shadow: none; + + /* Bevel system */ + --color-border-light: #899281; /* top / left of raised elements */ + --color-border-dark: #292d23; /* bottom / right of raised elements */ + --color-surface-raised: #4c5844; + + --color-selection: #96892d; +} + +/* Base Element Overrides */ + +html.greensteam body { + font-family: var(--font-body); + font-size: 14px; + image-rendering: pixelated; +} + +html.greensteam ::selection { + background-color: var(--color-selection); +} + +html.greensteam h1, +html.greensteam h2 { + color: var(--color-text-2); +} + +html.greensteam h1 { + font-size: 18px; +} +html.greensteam h2 { + font-size: 16px; +} + +html.greensteam p { + color: var(--color-text); +} + +/* Links: hover is underline only, no background swap */ +html.greensteam a { + color: var(--link-color); + text-decoration: none; +} +html.greensteam a:hover { + background: none; + color: var(--link-color); + text-decoration: underline; +} + +html.greensteam hr { + border: none; + height: 1px; + background-color: var(--color-bg); +} + +html.greensteam code { + background: var(--color-bg); + padding: 0 3px; +} + +html.greensteam pre { + background-color: var(--pre-bg); + box-shadow: none; + font-family: monospace; +} + +html.greensteam img { + object-fit: contain; + border: solid 2px #7b8484; + border-radius: 0 !important; +} + +html.greensteam header img { + padding-top: 0; + filter: none; +} + +html.greensteam div.site-description { + padding-top: 12.37rem !important; +} + +html.greensteam event img { + border-top: solid 1px var(--color-border-dark); + border-bottom: solid 1px var(--color-border-light); + border-left: solid 1px var(--color-border-dark); + border-right: solid 1px var(--color-border-light); + padding: 8px 12px; + width: -webkit-fill-available; +} + +/* Buttons */ + +html.greensteam button, +html.greensteam input[type="button"], +html.greensteam input[type="reset"], +html.greensteam input[type="submit"], +html.greensteam input[type="color"], +html.greensteam ::-webkit-file-upload-button, +html.greensteam ::file-selector-button, +html.greensteam .greensteam-button, +html.greenstream button.post.action, +html.greensteam div.text-block a { + color: white !important; + background-color: var(--color-surface-raised); + height: 25px; + /* min-width: 75px; */ + cursor: pointer; + border-top: solid 1px var(--color-border-light) !important; + border-bottom: solid 1px var(--color-border-dark) !important; + border-left: solid 1px var(--color-border-light) !important; + border-right: solid 1px var(--color-border-dark) !important; + font-weight: normal; + text-align: left; + -webkit-font-smoothing: none; +} + +html.greensteam button:hover, +html.greensteam div.text-block a:hover { + background: var(--color-surface-raised); + color: white; + text-decoration: none; +} + +html.greensteam button:active, +html.greenstream button.post.action:active, +html.greensteam input[type="button"]:active, +html.greensteam input[type="reset"]:active, +html.greensteam input[type="submit"]:active, +html.greensteam input[type="color"]:active, +html.greensteam ::-webkit-file-upload-button:active, +html.greensteam ::file-selector-button:active, +html.greensteam .greensteam-button:active, +html.greensteam div.text-block a:active { + border-top: solid 1px var(--color-border-dark) !important; + border-bottom: solid 1px var(--color-border-light) !important; + border-left: solid 1px var(--color-border-dark) !important; + border-right: solid 1px var(--color-border-light) !important; +} + +html.greensteam button:focus, +html.greensteam input[type="button"]:focus, +html.greensteam input[type="reset"]:focus, +html.greensteam input[type="submit"]:focus, +html.greensteam ::file-selector-button:focus, +html.greensteam .greensteam-button:focus, +html.greensteam div.text-block a:focus { + outline: 1px dashed var(--color-border-dark); + outline-offset: -4px; +} + +html.greensteam button.new-event, +html.greensteam button.new-post { + width: fit-content; +} + +html.greensteam ul.feed-items { + flex-direction: row; + position: unset; +} + +html.greensteam ul.feed-items button { + border-radius: 0; +} + +/* Form Inputs */ + +html.greensteam input[type="checkbox"] { + vertical-align: middle; + appearance: none; + width: 15px; + height: 15px; + border-top: solid 1px var(--color-border-dark); + border-bottom: solid 1px var(--color-border-light); + border-left: solid 1px var(--color-border-dark); + border-right: solid 1px var(--color-border-light); +} +html.greensteam input[type="checkbox"]:focus { + outline: 1px dotted black; + outline-offset: -2px; +} +html.greensteam input[type="checkbox"]:checked { + background-image: url("/styles/greensteam/checkmark.png"); +} + +html.greensteam input[type="radio"] { + vertical-align: text-bottom; + appearance: none; + width: 15px; + height: 15px; + background-image: url("/styles/greensteam/radio_off.png"); +} +html.greensteam input[type="radio"]:focus { + outline: 1px dotted black; +} +html.greensteam input[type="radio"]:checked { + background-image: url("/styles/greensteam/radio_on.png"); +} + +html.greensteam input[type="text"], +html.greensteam input[type="tel"], +html.greensteam input[type="search"], +html.greensteam input[type="password"], +html.greensteam input[type="email"], +html.greensteam input[type="url"], +html.greensteam input[type="number"], +html.greensteam input[type="date"], +html.greensteam input[type="datetime-local"], +html.greensteam input[type="month"], +html.greensteam input[type="week"], +html.greensteam input[type="time"], +html.greensteam input[list], +html.greensteam input, +html.greensteam select, +html.greensteam textarea { + border-top: solid 1px var(--color-border-dark) !important; + border-bottom: solid 1px var(--color-border-light) !important; + border-left: solid 1px var(--color-border-dark) !important; + border-right: solid 1px var(--color-border-light) !important; + border-radius: unset; + color: inherit; + background: var(--form-bg-color); + font-size: 11pt !important; +} + +html.greensteam input[type="text"]:focus, +html.greensteam input[type="tel"]:focus, +html.greensteam input[type="search"]:focus, +html.greensteam input[type="password"]:focus, +html.greensteam input[type="email"]:focus, +html.greensteam input[type="url"]:focus, +html.greensteam input[type="number"]:focus, +html.greensteam input[type="date"]:focus, +html.greensteam input[type="datetime-local"]:focus, +html.greensteam input[type="month"]:focus, +html.greensteam input[type="week"]:focus, +html.greensteam input[type="time"]:focus, +html.greensteam input[list]:focus, +html.greensteam input:focus, +html.greensteam select:focus, +html.greensteam textarea:focus { + outline: 1px dotted black; + outline-offset: -3px; +} + +html.greensteam ::-webkit-calendar-picker-indicator { + filter: brightness(0) invert() brightness(70%); +} + +/* Range Slider */ + +html.greensteam input[type="range"] { + appearance: none; + min-width: 200px; + color: #b8c4ad; + background: none; + position: relative; +} + +html.greensteam input[type="range"]::before, +html.greensteam input[type="range"]::after { + display: inline; + position: absolute; + font-size: 10px; + top: 10px; + font-family: monospace; +} +html.greensteam input[type="range"]::before { + left: 0; + content: attr(min); +} +html.greensteam input[type="range"]::after { + right: 0; + content: attr(max); +} + +html.greensteam input[type="range"]::-webkit-slider-runnable-track, +html.greensteam input[type="range"]::-moz-range-track, +html.greensteam input[type="range"]::-moz-range-progress { + background: black; + height: 4px; + border-top: solid 1px var(--color-border-dark); + border-bottom: solid 1px var(--color-border-light); + border-left: solid 1px var(--color-border-dark); + border-right: solid 1px var(--color-border-light); + margin: 6px 0; +} + +html.greensteam input[type="range"]::-webkit-slider-thumb, +html.greensteam input[type="range"]::-moz-range-thumb { + appearance: none; + background: var(--color-surface-raised); + border-top: solid 1px var(--color-border-light); + border-bottom: solid 1px var(--color-border-dark); + border-left: solid 1px var(--color-border-light); + border-right: solid 1px var(--color-border-dark); + width: 8px; + height: 16px; + position: relative; + top: -7px; + border-radius: 0; +} + +html.greensteam input[type="range"]:focus { + outline: 1px dotted black; + outline-offset: 2px; +} + +html.greensteam input[type="range"].ticks { + background: url("/styles/greensteam/sliderticks.png") repeat-x; + background-position: bottom left 2px; + background-size: 19px 5px; +} +html.greensteam input[type="range"].ticks::before, +html.greensteam input[type="range"].ticks::after { + top: 16px; +} + +/* Progress Bar */ + +html.greensteam progress { + -webkit-appearance: none; + appearance: none; + display: block; + width: 90%; + margin: 18px auto 12px; + height: 26px; + box-sizing: border-box; + border-top: solid 1px var(--color-border-dark); + border-bottom: solid 1px var(--color-border-light); + border-left: solid 1px var(--color-border-dark); + border-right: solid 1px var(--color-border-light); + background: var(--form-bg-color); +} +html.greensteam progress::-webkit-progress-bar { + background: var(--form-bg-color); + padding: 4px; +} +html.greensteam progress::-webkit-progress-value { + height: 16px; + background: repeating-linear-gradient( + to right, + #96892d, + #96892d 8px, + var(--form-bg-color) 1px, + var(--form-bg-color) 12px + ); +} +html.greensteam progress::-moz-progress-bar { + height: 16px; + background: repeating-linear-gradient( + to right, + #96892d, + #96892d 8px, + var(--form-bg-color) 1px, + var(--form-bg-color) 12px + ); + margin-top: 4px; + margin-left: 4px; +} + +/* Scrollbar */ + +html.greensteam ::-webkit-scrollbar, +html.greensteam ::-webkit-scrollbar-corner { + width: 18px; + background-color: #5a6a50; +} +html.greensteam ::-webkit-scrollbar-thumb { + background-color: var(--color-surface-raised); + border-top: solid 1px var(--color-border-light); + border-bottom: solid 1px var(--color-border-dark); + border-left: solid 1px var(--color-border-light); + border-right: solid 1px var(--color-border-dark); +} +html.greensteam ::-webkit-scrollbar-button { + width: 18px; + height: 18px; + border-top: solid 1px var(--color-border-light); + border-bottom: solid 1px var(--color-border-dark); + border-left: solid 1px var(--color-border-light); + border-right: solid 1px var(--color-border-dark); + background: var(--color-surface-raised); +} +html.greensteam ::-webkit-scrollbar-button:active { + border-top: solid 1px var(--color-border-dark); + border-bottom: solid 1px var(--color-border-light); + border-left: solid 1px var(--color-border-dark); + border-right: solid 1px var(--color-border-light); +} +html.greensteam ::-webkit-scrollbar-button:vertical:increment { + background: + url("/styles/greensteam/scroll_down.png") no-repeat center, + var(--color-surface-raised); +} +html.greensteam ::-webkit-scrollbar-button:vertical:decrement { + background: + url("/styles/greensteam/scroll_up.png") no-repeat center, + var(--color-surface-raised); +} +html.greensteam ::-webkit-scrollbar-button:horizontal:increment { + background: + url("/styles/greensteam/scroll_right.png") no-repeat center, + var(--color-surface-raised); +} +html.greensteam ::-webkit-scrollbar-button:horizontal:decrement { + background: + url("/styles/greensteam/scroll_left.png") no-repeat center, + var(--color-surface-raised); +} + +/* Navbar */ + +html.greensteam nav { + border-top: solid 1px var(--color-border-light); + border-bottom: solid 1px var(--color-border-dark); + border-left: solid 1px var(--color-border-light); + border-right: solid 1px var(--color-border-dark); + padding: 0; + list-style: none; + background: var(--color-surface-raised); + margin-bottom: 20px; + padding: 20px; +} +html.greensteam nav li { + display: inline-block; + position: relative; + line-height: 21px; + text-align: left; + cursor: pointer; +} +html.greensteam nav li a { + display: block; + padding: 8px 15px; + color: var(--color-text-2); + text-decoration: none; +} +html.greensteam nav li a:hover { + color: #e3e41f; + background: #5a6a50; + text-decoration: none; +} +html.greensteam nav li:hover ul.dropdown { + display: block; +} +html.greensteam nav li ul.dropdown { + display: none; + list-style: none; + border-bottom: solid 1px var(--color-border-dark); + border-left: solid 1px var(--color-border-light); + border-right: solid 1px var(--color-border-dark); + padding: 0; + min-width: 150px; + background: var(--color-surface-raised); + position: absolute; + top: 23px; + z-index: 1; +} +html.greensteam nav li ul.dropdown li { + display: block; +} + +/* Window & Box Components */ + +html.greensteam row { + backdrop-filter: none; + border: 0; +} + +html.greensteam sidebar { + border: 0; +} + +html.greensteam event, +html.greensteam div#recent, +html.greensteam div#recent-comments, +html.greensteam div#comments-list, +html.greensteam form#add-comment, +html.greensteam post:not(#recent post), +html.greensteam form#add-post:not(post form#add-post), +html.greensteam form#add-event:not(event form#add-event), +html.greensteam .box { + background-color: var(--color-surface-raised); + border-top: solid 1px var(--color-border-light); + border-bottom: solid 1px var(--color-border-dark); + border-left: solid 1px var(--color-border-light); + border-right: solid 1px var(--color-border-dark); + padding: 10px; + box-sizing: border-box; + margin: 0 0 20px; +} + +html.greensteam event { + display: block; +} + +html.greensteam post:not(#recent post) { + display: block; +} + +html.greensteam .titlebar, +html.greensteam event::before, +html.greensteam div#recent::before, +html.greensteam div#recent-comments::before, +html.greensteam div#comments-list::before, +html.greensteam form#add-comment::before, +html.greensteam post:not(#recent post)::before, +html.greensteam form#add-post:not(post form#add-post)::before, +html.greensteam form#add-event:not(event form#add-event)::before, +html.greensteam .box:not(.headless)::before { + display: block; + position: relative; + margin-bottom: 1em; + width: 100%; + height: 18px; + line-height: 18px; + text-indent: 24px; + background-image: + url("/styles/greensteam/steamico.png"), + url("/styles/greensteam/minimize.png"), url("/styles/greensteam/close.png"); + background-repeat: no-repeat; + background-position: + top left, + top right 20px, + top right; +} + +html.greensteam event::before, +html.greensteam div#recent::before, +html.greensteam div#recent-comments::before, +html.greensteam div#comments-list::before, +html.greensteam form#add-comment::before, +html.greensteam post:not(#recent post)::before, +html.greensteam form#add-post:not(post form#add-post)::before, +html.greensteam form#add-event:not(event form#add-event)::before, +html.greensteam .box:not(.headless)::before { + content: attr(name); +} + +html.greensteam event::after, +html.greensteam div#recent::after, +html.greensteam div#recent-comments::after, +html.greensteam div#comments-list::after, +html.greensteam form#add-comment::after, +html.greensteam post:not(#recent post)::after, +html.greensteam form#add-post:not(post form#add-post)::after, +html.greensteam form#add-event:not(event form#add-event)::after, +html.greensteam .box:not(.no-resize)::after { + width: 12px; + height: 12px; + display: block; + margin: 0 0 0 auto; + position: relative; + bottom: -7px; + right: -7px; + cursor: nwse-resize; + content: ""; + background-image: url("/styles/greensteam/resize.png"); +} + +html.greensteam .box.half, +html.greensteam .box-row .box { + max-width: 380px; + width: 100%; + align-self: flex-start; +} + +html.greensteam .box::before, +html.greensteam h1, +html.greensteam h2:not(.title), +html.greensteam .titlebar, +html.greensteam legend { + text-transform: uppercase; + letter-spacing: 2px; + font-size: 12px; + color: white; + font-weight: bold; +} + +html.greensteam .box-row { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: stretch; + max-width: 780px; +} + +/* Border Utilities */ + +html.greensteam .border { + border-top: solid 1px var(--color-border-light); + border-bottom: solid 1px var(--color-border-dark); + border-left: solid 1px var(--color-border-light); + border-right: solid 1px var(--color-border-dark); +} + +html.greensteam .border-inverted { + border-top: solid 1px var(--color-border-dark); + border-bottom: solid 1px var(--color-border-light); + border-left: solid 1px var(--color-border-dark); + border-right: solid 1px var(--color-border-light); +} + +html.greensteam .inset, +html.greensteam div.content, +html.greensteam div.event-description, +html.greensteam .box.inset { + margin-top: 1em; + margin-right: 1em; + padding: 1em; + background-color: var(--color-bg); + border-top: solid 1px var(--color-border-dark); + border-bottom: solid 1px var(--color-border-light); + border-left: solid 1px var(--color-border-dark); + border-right: solid 1px var(--color-border-light); +} + +html.greensteam div.content p:first-child { + margin-top: 0; +} + +html.greensteam .inset code, +html.greensteam .box.inset code { + background-color: var(--color-surface-raised); +} + +html.greensteam .rounded, +html.greensteam .box.rounded { + border: none; + border-radius: 10px; +} + +html.greensteam .inset .rounded { + background-color: #4a5942; +} +html.greensteam .inset .rounded code { + background-color: var(--color-bg); +} diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index 341bad3..2112b83 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -7,208 +7,212 @@ -

Lithuania underground scene

+
+

Lithuania underground scene

-{#if getLocale() === "lt"} - + +

Vilnius

+

+ Paslaptingoji driskių skylė XI20. +

+

+ Jei nori pasirodyti su grupe, rašyk: 1120 (A) hardcore.lt +

+

+ Pasiklydai, ieškai kaip ateiti? - Klausk pažįstamų pankų, arba rašyk tourist (A) hardcore.lt +

+

+ RETRITO SMARSAS - DIY erdvė + menininkams +

+

+ Kirtimų Kultūros Centras - dažnai + vykstantys nišiniai garso meno ir muzikos koncertai. Susisiek su jais, jei + groji noise arba folk muziką: + renginiai (A) kirtimukc.lt +

+

+ Facial Tumour Booking - underground muzikos booking crew +

+

Kaunas

+

+ Metalistų/"apolitiškas" baras Lemmy +

+

Alytus

+

+ Fenix baras - - +

+

Aplink pasaulį

+

+ Gidas apie underground vietas, koncertų organizatorius ir pan. Rytų + Europoje, kurį parengė noise-guru Arma: http://www.arma.lt/p/geography-of-sound.html +

+

Atnaujinta: Lapkritis 2020

+ {:else if getLocale() === "fi"} + -

Vilnius

-

- Paslaptingoji driskių skylė XI20. -

-

- Jei nori pasirodyti su grupe, rašyk: 1120 (A) hardcore.lt -

-

- Pasiklydai, ieškai kaip ateiti? - Klausk pažįstamų pankų, arba rašyk tourist (A) hardcore.lt -

-

- RETRITO SMARSAS - DIY erdvė - menininkams -

-

- Kirtimų Kultūros Centras - dažnai - vykstantys nišiniai garso meno ir muzikos koncertai. Susisiek su jais, jei - groji noise arba folk muziką: - renginiai (A) kirtimukc.lt -

-

- Facial Tumour Booking - underground muzikos booking crew -

-

Kaunas

-

- Metalistų/"apolitiškas" baras Lemmy -

-

Alytus

-

- Fenix baras -

-

Aplink pasaulį

-

- Gidas apie underground vietas, koncertų organizatorius ir pan. Rytų - Europoje, kurį parengė noise-guru Arma: http://www.arma.lt/p/geography-of-sound.html -

-

Atnaujinta: Lapkritis 2020

-{:else if getLocale() === "fi"} - +

Vilna

+

+ "Se" tee-se-itse -underground-tila on + XI20. Punkista avantgarde-jazziin, hardcoresta noiseen. +

+

+ Jos haluat soittaa XI20:ssa bändisi kanssa, ota yhteyttä: + 1120 (A) hardcore.lt +

+

+ Myös matkaajat ovat tervetulleita: kysy paikallisilta miten löytää paikka + tai jos olet epätoivoinen, kysy ohjeita osoitteesta + tourist (A) hardcore.lt +

+

+ Siistimpään ja taiteellisempaan meininkiin tsekkaa + RETRITO SMARSAS +

+

+ KKC eli Kirtimų Kultūros Centras on + kaupungin pyörittämä kulttuurikeskus, jota vetävät innostuneet ihmiset. + Ota heihin yhteyttä jos teet noisea tai kansanmusiikkia: + renginiai (A) kirtimukc.lt +

+

+ + Facial Tumour Booking + – keikkajärkkäritiimi synkälle underground-musiikille +

-

Vilna

-

- "Se" tee-se-itse -underground-tila on - XI20. Punkista avantgarde-jazziin, hardcoresta noiseen. -

-

- Jos haluat soittaa XI20:ssa bändisi kanssa, ota yhteyttä: - 1120 (A) hardcore.lt -

-

- Myös matkaajat ovat tervetulleita: kysy paikallisilta miten löytää paikka - tai jos olet epätoivoinen, kysy ohjeita osoitteesta - tourist (A) hardcore.lt -

-

- Siistimpään ja taiteellisempaan meininkiin tsekkaa - RETRITO SMARSAS -

-

- KKC eli Kirtimų Kultūros Centras on - kaupungin pyörittämä kulttuurikeskus, jota vetävät innostuneet ihmiset. Ota - heihin yhteyttä jos teet noisea tai kansanmusiikkia: - renginiai (A) kirtimukc.lt -

-

- - Facial Tumour Booking - – keikkajärkkäritiimi synkälle underground-musiikille -

+

Kaunas

+

+ Metallipainotteinen/"epäpoliittinen" paikka + Lemmy +

-

Kaunas

-

- Metallipainotteinen/"epäpoliittinen" paikka - Lemmy -

+

Alytus

+

+ Siellä on + + Fenix-baari + + +

-

Alytus

-

- Siellä on - - Fenix-baari +

Maailma

+

+ Itä-Euroopan underground-tilojen, promoottoreiden jne. opas noise-guru + Arman kokoamana: + + http://www.arma.lt/p/geography-of-sound.html - -

+

-

Maailma

-

- Itä-Euroopan underground-tilojen, promoottoreiden jne. opas noise-guru Arman - kokoamana: - - http://www.arma.lt/p/geography-of-sound.html - -

+

viimeksi päivitetty: marraskuu 2020

+ {:else} + -

viimeksi päivitetty: marraskuu 2020

-{:else} - - -

Vilnius

-

- "The" DIY underground venue is XI20. From punk to vanguard jazz, hardcore to noise. -

-

- If you want to play at XI20 with your band please contact: 1120 (A) hardcore.lt -

-

- Travellers are also welcome: ask locals how to find the place or if you are - desperate ask for directions at tourist (A) hardcore.lt -

-

- For cleaner artsier vibes check out RETRITO SMARSAS -

-

- KKC aka Kirtimų Kultūros Centras is a - city-run cultural center staffed by enthusiastic people. Get in touch with - them if you're noise or folk act: - renginiai (A) kirtimukc.lt -

-

- Facial Tumour Booking -- booking crew for dark underground music -

-

Kaunas

-

- Metalhead/"apolitical" venue Lemmy -

-

Alytus

-

- There is a Fenix bar -

-

World

-

- There’s a guide to underground venues/promoters/etc in Eastern Europe, made - by the noise-guru Arma: http://www.arma.lt/p/geography-of-sound.html -

-

last update: November 2020

-{/if} +

+

+ Travellers are also welcome: ask locals how to find the place or if you + are desperate ask for directions at tourist (A) hardcore.lt +

+

+ For cleaner artsier vibes check out RETRITO SMARSAS +

+

+ KKC aka Kirtimų Kultūros Centras is a + city-run cultural center staffed by enthusiastic people. Get in touch with + them if you're noise or folk act: + renginiai (A) kirtimukc.lt +

+

+ Facial Tumour Booking -- booking crew for dark underground music +

+

Kaunas

+

+ Metalhead/"apolitical" venue Lemmy +

+

Alytus

+

+ There is a Fenix bar +

+

World

+

+ There’s a guide to underground venues/promoters/etc in Eastern Europe, + made by the noise-guru Arma: http://www.arma.lt/p/geography-of-sound.html +

+

last update: November 2020

+ {/if} +