summaryrefslogtreecommitdiff
path: root/src/css/style.css
diff options
context:
space:
mode:
Diffstat (limited to 'src/css/style.css')
-rw-r--r--src/css/style.css1395
1 files changed, 683 insertions, 712 deletions
diff --git a/src/css/style.css b/src/css/style.css
index 50c6f48..97b14f3 100644
--- a/src/css/style.css
+++ b/src/css/style.css
@@ -1,271 +1,259 @@
:root {
- /* Win95 "strawberry latte" tokens */
-
- /* Desktop (rarely used, but handy for full-page demos) */
- --desktop: #d7a5b7;
-
- /* Page + surfaces */
- --bg: #f4ece7; /* page behind windows */
- --bg-pattern: #efe5df;
-
- /* Background texture (dither/checker overlay) */
- --dither-ink: rgba(59, 46, 44, 0.22);
- --dither-opacity: 0.18;
- --surface: #e9dcd5; /* window face */
- --surface-alt: #fff7f2; /* milk highlight */
-
- /* Text */
- --fg: #2a1f1d;
- --muted: #6a5550;
-
- /* 3D border system */
- --border: #3b2e2c;
- --border-light: #fff7f2;
- --border-dark: #8e7670;
-
- /* Girly coffee accents */
- --primary: #e56aa6; /* strawberry */
- --primary-light: #f08dbe; /* strawberry milk */
- --primary-dark: #c84d86; /* rose */
-
- --secondary: #b69cff; /* lilac */
- --secondary-light: #d7c8ff;
- --secondary-dark: #8f78d6;
-
- --accent-brown: #b88a68; /* latte */
- --accent-brown-light: #d4a574;
- --accent-brown-dark: #7a5245;
-
- /* Title bar (Win95-ish window chrome) */
- --titlebar-a: #d85b9b;
- --titlebar-b: #7a3e8e;
- --titlebar-fg: #fff7f2;
-
- /* Links */
- --link: #c84d86;
- --link-visited: #6f2f80;
- --link-active: #b5173d;
-
- /* Keep existing names as aliases */
- --accent-pink: var(--primary);
- --accent-lavender: var(--secondary);
-
- /* Status colors (slightly softened) */
- --success: #2e8b57;
- --error: #b3261e;
- --warning: #b7791f;
- --info: #2b6cb0;
-
- /* Spacing */
- --space-xs: 0.5rem;
- --space-sm: 1rem;
- --space-md: 1.5rem;
- --space-lg: 2rem;
- --space-xl: 3rem;
-
- /* Borders */
- --border-width: 2px;
- --border-style: solid;
-
- /* Type */
- --font-mono: "Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
- --line-height: 1.35;
-
- /* Shadows */
- --shadow-sm: 1px 1px 0;
- --shadow-md: 2px 2px 0;
- --shadow-lg: 3px 3px 0;
- --shadow-color: rgba(0, 0, 0, 0.22);
- --shadow-box: 2px 2px 0 rgba(0, 0, 0, 0.12);
- --shadow-button: 1px 1px 0 rgba(0, 0, 0, 0.18);
-
- --highlight: rgba(255, 247, 242, 0.9);
- --lowlight: rgba(59, 46, 44, 0.55);
-
- --content-max-width: 1000px;
+ /* Win95 "strawberry latte" tokens */
+
+ /* Desktop (rarely used, but handy for full-page demos) */
+ --desktop: #d7a5b7;
+
+ /* Page + surfaces */
+ --bg: #f4ece7; /* page behind windows */
+ --bg-pattern: #efe5df;
+
+ /* Background texture (dither/checker overlay) */
+ --dither-ink: rgba(59, 46, 44, 0.22);
+ --dither-opacity: 0.18;
+ --surface: #e9dcd5; /* window face */
+ --surface-alt: #fff7f2; /* milk highlight */
+
+ /* Text */
+ --fg: #2a1f1d;
+ --muted: #6a5550;
+
+ /* 3D border system */
+ --border: #3b2e2c;
+ --border-light: #fff7f2;
+ --border-dark: #8e7670;
+
+ /* Girly coffee accents */
+ --primary: #e56aa6; /* strawberry */
+ --primary-light: #f08dbe; /* strawberry milk */
+ --primary-dark: #c84d86; /* rose */
+
+ --secondary: #b69cff; /* lilac */
+ --secondary-light: #d7c8ff;
+ --secondary-dark: #8f78d6;
+
+ --accent-brown: #b88a68; /* latte */
+ --accent-brown-light: #d4a574;
+ --accent-brown-dark: #7a5245;
+
+ /* Title bar (Win95-ish window chrome) */
+ --titlebar-a: #d85b9b;
+ --titlebar-b: #7a3e8e;
+ --titlebar-fg: #fff7f2;
+
+ /* Links */
+ --link: #c84d86;
+ --link-visited: #6f2f80;
+ --link-active: #b5173d;
+
+ /* Keep existing names as aliases */
+ --accent-pink: var(--primary);
+ --accent-lavender: var(--secondary);
+
+ /* Status colors (slightly softened) */
+ --success: #2e8b57;
+ --error: #b3261e;
+ --warning: #b7791f;
+ --info: #2b6cb0;
+
+ /* Spacing */
+ --space-xs: 0.5rem;
+ --space-sm: 1rem;
+ --space-md: 1.5rem;
+ --space-lg: 2rem;
+ --space-xl: 3rem;
+
+ /* Borders */
+ --border-width: 2px;
+ --border-style: solid;
+
+ /* Type */
+ --font-mono: "Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
+ "Courier New", monospace;
+ --line-height: 1.35;
+
+ /* Shadows */
+ --shadow-sm: 1px 1px 0;
+ --shadow-md: 2px 2px 0;
+ --shadow-lg: 3px 3px 0;
+ --shadow-color: rgba(0, 0, 0, 0.22);
+ --shadow-box: 2px 2px 0 rgba(0, 0, 0, 0.12);
+ --shadow-button: 1px 1px 0 rgba(0, 0, 0, 0.18);
+
+ --highlight: rgba(255, 247, 242, 0.9);
+ --lowlight: rgba(59, 46, 44, 0.55);
+
+ --content-max-width: 1000px;
}
[data-theme="dark"] {
- /* Espresso-night variant */
- --bg: #2d2523;
- --bg-pattern: #241e1c;
+ /* Espresso-night variant */
+ --bg: #2d2523;
+ --bg-pattern: #241e1c;
- --dither-ink: rgba(255, 247, 242, 0.12);
- --dither-opacity: 0.14;
- --surface: #3b312f;
- --surface-alt: #463a37;
+ --dither-ink: rgba(255, 247, 242, 0.12);
+ --dither-opacity: 0.14;
+ --surface: #3b312f;
+ --surface-alt: #463a37;
- --fg: #f9efea;
- --muted: #cbb8b1;
+ --fg: #f9efea;
+ --muted: #cbb8b1;
- --border: #f1e6e0;
- --border-light: #6e5b57;
- --border-dark: #120d0c;
+ --border: #f1e6e0;
+ --border-light: #6e5b57;
+ --border-dark: #120d0c;
- --primary: #f06aa6;
- --primary-light: #ff97c8;
- --primary-dark: #d94b8e;
+ --primary: #f06aa6;
+ --primary-light: #ff97c8;
+ --primary-dark: #d94b8e;
- --secondary: #b69cff;
- --secondary-light: #d7c8ff;
- --secondary-dark: #8f78d6;
+ --secondary: #b69cff;
+ --secondary-light: #d7c8ff;
+ --secondary-dark: #8f78d6;
- --accent-brown: #a57353;
- --accent-brown-light: #c9936a;
- --accent-brown-dark: #6b4a34;
+ --accent-brown: #a57353;
+ --accent-brown-light: #c9936a;
+ --accent-brown-dark: #6b4a34;
- --titlebar-a: #b04a80;
- --titlebar-b: #4f245e;
- --titlebar-fg: #fff7f2;
+ --titlebar-a: #b04a80;
+ --titlebar-b: #4f245e;
+ --titlebar-fg: #fff7f2;
- --link: #ff97c8;
- --link-visited: #d7c8ff;
- --link-active: #fff0f7;
+ --link: #ff97c8;
+ --link-visited: #d7c8ff;
+ --link-active: #fff0f7;
- /* Status colors (brightened for dark mode) */
- --success: #4caf50;
- --error: #ff6b6b;
- --warning: #ffa500;
- --info: #64b5f6;
+ /* Status colors (brightened for dark mode) */
+ --success: #4caf50;
+ --error: #ff6b6b;
+ --warning: #ffa500;
+ --info: #64b5f6;
- --shadow-color: rgba(0, 0, 0, 0.75);
- --highlight: rgba(255, 255, 255, 0.2);
- --lowlight: rgba(0, 0, 0, 0.85);
+ --shadow-color: rgba(0, 0, 0, 0.75);
+ --highlight: rgba(255, 255, 255, 0.2);
+ --lowlight: rgba(0, 0, 0, 0.85);
}
@font-face {
- font-family: "Mono";
- src: url("../assets/fonts/Maple.woff2") format("woff2");
- font-display: swap;
- font-weight: normal;
+ font-family: "Mono";
+ src: url("../assets/fonts/Maple.woff2") format("woff2");
+ font-display: swap;
+ font-weight: normal;
}
@supports (font-synthesis: none) {
- @font-face {
- font-family: "Mono";
- src: url("../assets/fonts/Maple.woff2") format("woff2");
- font-synthesis: none;
- }
+ @font-face {
+ font-family: "Mono";
+ src: url("../assets/fonts/Maple.woff2") format("woff2");
+ font-synthesis: none;
+ }
}
/* base */
* {
- box-sizing: border-box;
- margin: 0;
- padding: 0;
- cursor:
- url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 24" width="32" height="24"><path d="M1 3h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v2H9v1h1v2h1v2h-1v1H8v-1H7v-2H6v-2H5v1H4v1H3v1H1" fill="%23ff69b4" stroke="%23b19cd9" stroke-width="0.5"/><path d="M2 5h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1H8v2h1v2h1v2H8v-2H7v-2H6v-1H5v1H4v1H3v1H2" fill="white" stroke="%23ff69b4" stroke-width="0.5"/></svg>')
- 0 0,
- auto !important;
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ cursor: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 24" width="32" height="24"><path d="M1 3h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v2H9v1h1v2h1v2h-1v1H8v-1H7v-2H6v-2H5v1H4v1H3v1H1" fill="%23ff69b4" stroke="%23b19cd9" stroke-width="0.5"/><path d="M2 5h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1H8v2h1v2h1v2H8v-2H7v-2H6v-1H5v1H4v1H3v1H2" fill="white" stroke="%23ff69b4" stroke-width="0.5"/></svg>')
+ 0 0, auto !important;
}
::selection {
- background: var(--primary);
- color: var(--surface-alt);
+ background: var(--primary);
+ color: var(--surface-alt);
}
:focus-visible {
- outline: 1px dotted var(--fg);
- outline-offset: 2px;
+ outline: 1px dotted var(--fg);
+ outline-offset: 2px;
}
html {
- font-size: 16px;
- background-color: var(--bg);
- position: relative;
- line-height: 1;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- height: 100vh;
+ font-size: 16px;
+ background-color: var(--bg);
+ position: relative;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ height: 100vh;
}
html::before {
- content: "";
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background-image: linear-gradient(
- 45deg,
- var(--dither-ink) 25%,
- transparent 25%,
- transparent 75%,
- var(--dither-ink) 75%
- ),
- linear-gradient(
- 45deg,
- var(--dither-ink) 25%,
- transparent 25%,
- transparent 75%,
- var(--dither-ink) 75%
- ),
- url("../assets/img/bg.png");
- background-size:
- 10px 10px,
- 10px 10px,
- auto;
- background-position:
- 0 0,
- 5px 5px,
- 0 0;
- background-repeat: repeat;
- opacity: var(--dither-opacity);
- z-index: -1;
- pointer-events: none;
+ content: "";
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-image: linear-gradient(
+ 45deg,
+ var(--dither-ink) 25%,
+ transparent 25%,
+ transparent 75%,
+ var(--dither-ink) 75%
+ ),
+ linear-gradient(
+ 45deg,
+ var(--dither-ink) 25%,
+ transparent 25%,
+ transparent 75%,
+ var(--dither-ink) 75%
+ ), url("../assets/img/bg.png");
+ background-size: 10px 10px, 10px 10px, auto;
+ background-position: 0 0, 5px 5px, 0 0;
+ background-repeat: repeat;
+ opacity: var(--dither-opacity);
+ z-index: -1;
+ pointer-events: none;
}
body {
- background: transparent;
- color: var(--fg);
- line-height: var(--line-height);
- padding: var(--space-md);
- padding-top: calc(var(--space-md) + 3rem);
- max-width: var(--content-max-width);
- margin: 0 auto;
- font-family: var(--font-mono);
- scrollbar-color: var(--accent-lavender) var(--bg);
- scrollbar-width: thin;
- display: flex;
- flex-direction: column;
- height: 100vh;
+ background: transparent;
+ color: var(--fg);
+ line-height: var(--line-height);
+ padding: var(--space-md);
+ padding-top: calc(var(--space-md) + 3rem);
+ max-width: var(--content-max-width);
+ margin: 0 auto;
+ font-family: var(--font-mono);
+ scrollbar-color: var(--accent-lavender) var(--bg);
+ scrollbar-width: thin;
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
}
/* webkit scrollbar (chrome, safari, edge) */
::-webkit-scrollbar {
- width: 12px;
+ width: 12px;
}
::-webkit-scrollbar-track {
- background: var(--bg);
- border: 2px solid var(--border);
- box-shadow:
- inset 1px 1px 0 var(--border-light),
- inset -1px -1px 0 var(--border-dark);
+ background: var(--bg);
+ border: 2px solid var(--border);
+ box-shadow: inset 1px 1px 0 var(--border-light), inset -1px -1px 0 var(--border-dark);
}
::-webkit-scrollbar-thumb {
- background: var(--accent-lavender);
- border: 2px outset var(--border-light);
- box-shadow:
- inset 1px 1px 0 var(--highlight),
- inset -1px -1px 0 var(--lowlight);
+ background: var(--accent-lavender);
+ border: 2px outset var(--border-light);
+ box-shadow: inset 1px 1px 0 var(--highlight), inset -1px -1px 0 var(--lowlight);
}
::-webkit-scrollbar-thumb:hover {
- background: var(--accent-pink);
+ background: var(--accent-pink);
}
.div-centered {
- max-width: var(--content-max-width);
- margin: auto;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- min-height: calc(100vh - 4.5rem);
- text-align: justify;
+ max-width: var(--content-max-width);
+ margin: auto;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ min-height: calc(100vh - 4.5rem);
+ text-align: justify;
}
/* typography */
@@ -276,169 +264,163 @@ h3,
h4,
h5,
h6 {
- font-family: var(--font-mono);
- font-weight: 700;
- line-height: 1.15;
- margin-bottom: var(--space-md);
- color: var(--fg);
+ font-family: var(--font-mono);
+ font-weight: 700;
+ line-height: 1.15;
+ margin-bottom: var(--space-md);
+ color: var(--fg);
}
h1 {
- font-size: 2rem;
- margin-bottom: var(--space-lg);
- background: linear-gradient(90deg, var(--titlebar-a), var(--titlebar-b));
+ font-size: 2rem;
+ margin-bottom: var(--space-lg);
+ background: linear-gradient(90deg, var(--titlebar-a), var(--titlebar-b));
}
/* "Titlebar" headings: retro, but still cute */
h1,
h2,
h3 {
- padding: 0.55rem 0.75rem;
- border: var(--border-width) solid var(--border);
- box-shadow:
- inset 1px 1px 0 var(--border-light),
- inset -1px -1px 0 var(--border-dark);
- color: var(--titlebar-fg);
- text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.25);
+ padding: 0.55rem 0.75rem;
+ border: var(--border-width) solid var(--border);
+ box-shadow: inset 1px 1px 0 var(--border-light), inset -1px -1px 0 var(--border-dark);
+ color: var(--titlebar-fg);
+ text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.25);
}
h2 {
- font-size: 1.5rem;
- background: linear-gradient(90deg, var(--titlebar-a), var(--titlebar-b));
+ font-size: 1.5rem;
+ background: linear-gradient(90deg, var(--titlebar-a), var(--titlebar-b));
}
h3 {
- font-size: 1.25rem;
- background: linear-gradient(90deg, var(--accent-brown-dark), var(--accent-brown));
+ font-size: 1.25rem;
+ background: linear-gradient(90deg, var(--accent-brown-dark), var(--accent-brown));
}
h4 {
- font-size: 1.1rem;
+ font-size: 1.1rem;
}
h5 {
- font-size: 1rem;
+ font-size: 1rem;
}
h6 {
- font-size: 0.9rem;
+ font-size: 0.9rem;
}
p {
- margin-bottom: var(--space-sm);
+ margin-bottom: var(--space-sm);
}
a {
- color: var(--link);
- text-decoration: underline;
- text-decoration-thickness: 2px;
- text-underline-offset: 2px;
+ color: var(--link);
+ text-decoration: underline;
+ text-decoration-thickness: 2px;
+ text-underline-offset: 2px;
}
a:visited {
- color: var(--link-visited);
+ color: var(--link-visited);
}
a:hover {
- background: var(--primary-light);
- color: var(--fg);
+ background: var(--primary-light);
+ color: var(--fg);
}
a:active {
- color: var(--link-active);
+ color: var(--link-active);
}
small {
- color: var(--muted);
- font-size: 0.875rem;
+ color: var(--muted);
+ font-size: 0.875rem;
}
blockquote {
- border-left: 3px solid var(--accent-brown);
- padding-left: var(--space-md);
- margin: var(--space-md) 0;
- font-style: italic;
- color: var(--muted);
+ border-left: 3px solid var(--accent-brown);
+ padding-left: var(--space-md);
+ margin: var(--space-md) 0;
+ font-style: italic;
+ color: var(--muted);
}
/* lists */
ul,
ol {
- margin: var(--space-sm) 0;
- padding-left: var(--space-lg);
+ margin: var(--space-sm) 0;
+ padding-left: var(--space-lg);
}
li {
- margin-bottom: var(--space-xs);
+ margin-bottom: var(--space-xs);
}
/* tables */
table {
- width: 100%;
- border-collapse: collapse;
- margin: var(--space-md) 0;
- border: var(--border-width) solid var(--border);
- background: var(--surface);
- box-shadow:
- inset 1px 1px 0 var(--border-light),
- inset -1px -1px 0 var(--border-dark),
- 3px 3px 0 rgba(0, 0, 0, 0.12);
+ width: 100%;
+ border-collapse: collapse;
+ margin: var(--space-md) 0;
+ border: var(--border-width) solid var(--border);
+ background: var(--surface);
+ box-shadow: inset 1px 1px 0 var(--border-light), inset -1px -1px 0 var(--border-dark), 3px 3px 0
+ rgba(0, 0, 0, 0.12);
}
thead {
- background: linear-gradient(90deg, var(--titlebar-a), var(--titlebar-b));
- color: var(--titlebar-fg);
- font-weight: 700;
+ background: linear-gradient(90deg, var(--titlebar-a), var(--titlebar-b));
+ color: var(--titlebar-fg);
+ font-weight: 700;
}
th,
td {
- padding: var(--space-xs) var(--space-sm);
- border: 1px solid var(--border-dark);
- text-align: left;
+ padding: var(--space-xs) var(--space-sm);
+ border: 1px solid var(--border-dark);
+ text-align: left;
}
tbody tr:nth-child(odd) {
- background: var(--surface-alt);
+ background: var(--surface-alt);
}
tbody tr:nth-child(even) {
- background: var(--surface);
+ background: var(--surface);
}
tbody tr:hover {
- background: color-mix(in srgb, var(--primary) 12%, transparent);
+ background: color-mix(in srgb, var(--primary) 12%, transparent);
}
/* code */
code {
- background: var(--surface-alt);
- padding: 0.25rem 0.5rem;
- border: 1px solid var(--border-dark);
- font-size: 0.875rem;
- font-family: var(--font-mono);
+ background: var(--surface-alt);
+ padding: 0.25rem 0.5rem;
+ border: 1px solid var(--border-dark);
+ font-size: 0.875rem;
+ font-family: var(--font-mono);
}
pre {
- background: var(--surface-alt);
- border: var(--border-width) solid var(--border);
- padding: var(--space-md);
- margin: var(--space-md) 0;
- overflow-x: auto;
- box-shadow:
- inset 1px 1px 0 var(--border-light),
- inset -1px -1px 0 var(--border-dark),
- 3px 3px 0 rgba(0, 0, 0, 0.12);
+ background: var(--surface-alt);
+ border: var(--border-width) solid var(--border);
+ padding: var(--space-md);
+ margin: var(--space-md) 0;
+ overflow-x: auto;
+ box-shadow: inset 1px 1px 0 var(--border-light), inset -1px -1px 0 var(--border-dark), 3px 3px 0
+ rgba(0, 0, 0, 0.12);
}
pre code {
- background: transparent;
- border: none;
- padding: 0;
- font-size: 0.875rem;
+ background: transparent;
+ border: none;
+ padding: 0;
+ font-size: 0.875rem;
}
/* Prism.js syntax highlighting */
@@ -447,12 +429,12 @@ pre code {
.token.prolog,
.token.doctype,
.token.cdata {
- color: var(--muted);
- font-style: italic;
+ color: var(--muted);
+ font-style: italic;
}
.token.punctuation {
- color: var(--fg);
+ color: var(--fg);
}
.token.property,
@@ -461,7 +443,7 @@ pre code {
.token.number,
.token.constant,
.token.symbol {
- color: var(--secondary-dark);
+ color: var(--secondary-dark);
}
.token.selector,
@@ -469,7 +451,7 @@ pre code {
.token.string,
.token.char,
.token.builtin {
- color: var(--accent-brown-dark);
+ color: var(--accent-brown-dark);
}
.token.operator,
@@ -477,183 +459,179 @@ pre code {
.token.url,
.language-css .token.string,
.style .token.string {
- color: var(--primary-dark);
+ color: var(--primary-dark);
}
.token.atrule,
.token.attr-value,
.token.keyword {
- color: var(--primary-dark);
- font-weight: 700;
+ color: var(--primary-dark);
+ font-weight: 700;
}
.token.function,
.token.class-name {
- color: var(--primary);
- font-weight: 700;
+ color: var(--primary);
+ font-weight: 700;
}
.token.regex,
.token.important,
.token.variable {
- color: var(--accent-brown);
+ color: var(--accent-brown);
}
.token.important,
.token.bold {
- font-weight: bold;
+ font-weight: bold;
}
.token.italic {
- font-style: italic;
+ font-style: italic;
}
/* Dark theme variants */
[data-theme="dark"] .token.keyword,
[data-theme="dark"] .token.operator {
- color: var(--primary-light);
+ color: var(--primary-light);
}
[data-theme="dark"] .token.string,
[data-theme="dark"] .token.selector {
- color: var(--accent-brown-light);
+ color: var(--accent-brown-light);
}
[data-theme="dark"] .token.number,
[data-theme="dark"] .token.constant {
- color: var(--secondary-light);
+ color: var(--secondary-light);
}
/* dividers */
hr {
- border: none;
- border-top: 2px solid var(--border-dark);
- margin: var(--space-lg) 0;
- height: 0;
+ border: none;
+ border-top: 2px solid var(--border-dark);
+ margin: var(--space-lg) 0;
+ height: 0;
}
/* layout */
header {
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- z-index: 1000;
- border-bottom: 2px solid var(--border);
- padding: 0.45rem var(--space-md);
- margin-bottom: 0;
- background: linear-gradient(90deg, var(--titlebar-a), var(--titlebar-b));
- color: var(--titlebar-fg);
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: var(--space-md);
- box-shadow:
- inset 1px 1px 0 var(--border-light),
- inset -1px -1px 0 var(--border-dark),
- 0 2px 0 rgba(0, 0, 0, 0.08);
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 1000;
+ border-bottom: 2px solid var(--border);
+ padding: 0.45rem var(--space-md);
+ margin-bottom: 0;
+ background: linear-gradient(90deg, var(--titlebar-a), var(--titlebar-b));
+ color: var(--titlebar-fg);
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: var(--space-md);
+ box-shadow: inset 1px 1px 0 var(--border-light), inset -1px -1px 0 var(--border-dark), 0 2px 0
+ rgba(0, 0, 0, 0.08);
}
header h1 {
- display: none;
+ display: none;
}
header::before {
- content: "";
- display: inline-block;
- width: 1.5rem;
- height: 1.5rem;
- background-image: url("../assets/img/coffee.svg");
- background-size: 1.1rem 1.1rem;
- background-position: center;
- background-repeat: no-repeat;
- margin-right: 0.5rem;
- background-color: var(--surface);
- border: 2px outset var(--border-light);
- box-shadow:
- inset 1px 1px 0 var(--highlight),
- inset -1px -1px 0 var(--lowlight);
+ content: "";
+ display: inline-block;
+ width: 1.5rem;
+ height: 1.5rem;
+ background-image: url("../assets/img/coffee.svg");
+ background-size: 1.1rem 1.1rem;
+ background-position: center;
+ background-repeat: no-repeat;
+ margin-right: 0.5rem;
+ background-color: var(--surface);
+ border: 2px outset var(--border-light);
+ box-shadow: inset 1px 1px 0 var(--highlight), inset -1px -1px 0 var(--lowlight);
}
nav {
- display: flex;
- gap: var(--space-md);
- flex-wrap: wrap;
- align-items: center;
- margin: 0;
- flex: 1;
+ display: flex;
+ gap: var(--space-md);
+ flex-wrap: wrap;
+ align-items: center;
+ margin: 0;
+ flex: 1;
}
nav a {
- font-size: 0.85rem;
- padding: 0.1rem 0.15rem;
- color: var(--titlebar-fg);
- text-decoration: none;
- border-bottom: 2px solid color-mix(in srgb, var(--titlebar-fg) 55%, transparent);
+ font-size: 0.85rem;
+ padding: 0.1rem 0.15rem;
+ color: var(--titlebar-fg);
+ text-decoration: none;
+ border-bottom: 2px solid color-mix(in srgb, var(--titlebar-fg) 55%, transparent);
}
nav a:visited {
- color: var(--titlebar-fg);
+ color: var(--titlebar-fg);
}
nav a:hover {
- background: color-mix(in srgb, var(--surface-alt) 18%, transparent);
- border-bottom-color: var(--primary-light);
+ background: color-mix(in srgb, var(--surface-alt) 18%, transparent);
+ border-bottom-color: var(--primary-light);
}
nav a:active {
- background: color-mix(in srgb, var(--surface-alt) 28%, transparent);
- border-bottom-color: var(--primary);
+ background: color-mix(in srgb, var(--surface-alt) 28%, transparent);
+ border-bottom-color: var(--primary);
}
main {
- flex: 1;
+ flex: 1;
}
article {
- border: var(--border-width) solid var(--border);
- padding: var(--space-md);
- margin-bottom: var(--space-lg);
- background: var(--surface);
- box-shadow:
- inset 1px 1px 0 var(--border-light),
- inset -1px -1px 0 var(--border-dark),
- 4px 4px 0 rgba(0, 0, 0, 0.14),
- 5px 5px 0 rgba(0, 0, 0, 0.06);
+ border: var(--border-width) solid var(--border);
+ padding: var(--space-md);
+ margin-bottom: var(--space-lg);
+ background: var(--surface);
+ box-shadow:
+ inset 1px 1px 0 var(--border-light),
+ inset -1px -1px 0 var(--border-dark),
+ 4px 4px 0 rgba(0, 0, 0, 0.14),
+ 5px 5px 0 rgba(0, 0, 0, 0.06);
}
article > :last-child {
- margin-bottom: 0;
+ margin-bottom: 0;
}
article h2 {
- margin: calc(var(--space-md) * -1) calc(var(--space-md) * -1) var(--space-md);
- border-left: none;
- border-right: none;
- border-top: none;
- border-bottom: var(--border-width) solid var(--border);
- box-shadow: none;
- text-shadow: none;
+ margin: calc(var(--space-md) * -1) calc(var(--space-md) * -1) var(--space-md);
+ border-left: none;
+ border-right: none;
+ border-top: none;
+ border-bottom: var(--border-width) solid var(--border);
+ box-shadow: none;
+ text-shadow: none;
}
footer {
- border: var(--border-width) solid var(--border);
- padding: var(--space-md);
- text-align: center;
- background: var(--surface);
- font-size: 0.875rem;
- box-shadow:
- inset 1px 1px 0 var(--border-light),
- inset -1px -1px 0 var(--border-dark),
- 4px 4px 0 rgba(0, 0, 0, 0.14),
- 5px 5px 0 rgba(0, 0, 0, 0.06);
+ border: var(--border-width) solid var(--border);
+ padding: var(--space-md);
+ text-align: center;
+ background: var(--surface);
+ font-size: 0.875rem;
+ box-shadow:
+ inset 1px 1px 0 var(--border-light),
+ inset -1px -1px 0 var(--border-dark),
+ 4px 4px 0 rgba(0, 0, 0, 0.14),
+ 5px 5px 0 rgba(0, 0, 0, 0.06);
}
footer > :last-child {
- margin-bottom: 0;
+ margin-bottom: 0;
}
/* components */
@@ -663,615 +641,608 @@ footer > :last-child {
input,
textarea,
select {
- font-family: var(--font-mono);
- padding: var(--space-xs) var(--space-sm);
- border: 2px inset var(--border-light);
- background: var(--surface-alt);
- color: var(--fg);
- font-size: 0.875rem;
- box-shadow:
- inset 1px 1px 0 var(--lowlight),
- inset -1px -1px 0 var(--highlight);
- transition: border-color 0.15s, box-shadow 0.15s;
- width: 100%;
- max-width: 100%;
+ font-family: var(--font-mono);
+ padding: var(--space-xs) var(--space-sm);
+ border: 2px inset var(--border-light);
+ background: var(--surface-alt);
+ color: var(--fg);
+ font-size: 0.875rem;
+ box-shadow: inset 1px 1px 0 var(--lowlight), inset -1px -1px 0 var(--highlight);
+ transition: border-color 0.15s, box-shadow 0.15s;
+ width: 100%;
+ max-width: 100%;
}
input::placeholder,
textarea::placeholder,
select::placeholder {
- color: var(--muted);
- opacity: 0.8;
+ color: var(--muted);
+ opacity: 0.8;
}
[data-theme="dark"] input::placeholder,
[data-theme="dark"] textarea::placeholder,
[data-theme="dark"] select::placeholder {
- color: #b8b0a0;
- opacity: 1;
+ color: #b8b0a0;
+ opacity: 1;
}
input:focus,
textarea:focus,
select:focus {
- outline: 1px dotted var(--fg);
- outline-offset: 2px;
- border-color: var(--primary);
- box-shadow:
- inset 1px 1px 0 var(--lowlight),
- inset -1px -1px 0 var(--highlight),
- 0 0 0 2px var(--primary);
+ outline: 1px dotted var(--fg);
+ outline-offset: 2px;
+ border-color: var(--primary);
+ box-shadow: inset 1px 1px 0 var(--lowlight), inset -1px -1px 0 var(--highlight), 0 0 0 2px
+ var(--primary);
}
input:invalid,
textarea:invalid {
- border-color: var(--error);
+ border-color: var(--error);
}
input:invalid:focus,
textarea:invalid:focus {
- box-shadow:
- inset 1px 1px 0 var(--highlight),
- inset -1px -1px 0 var(--lowlight),
- 0 0 0 2px var(--error);
+ box-shadow: inset 1px 1px 0 var(--highlight), inset -1px -1px 0 var(--lowlight), 0 0 0 2px
+ var(--error);
}
textarea {
- resize: vertical;
- min-height: 4rem;
- width: 100%;
+ resize: vertical;
+ min-height: 4rem;
+ width: 100%;
}
select {
- cursor: pointer;
- appearance: none;
- background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232a1f1d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
- background-repeat: no-repeat;
- background-position: right 0.5rem center;
- background-size: 1.2em;
- padding-right: 2.5rem;
+ cursor: pointer;
+ appearance: none;
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232a1f1d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-position: right 0.5rem center;
+ background-size: 1.2em;
+ padding-right: 2.5rem;
}
[data-theme="dark"] select {
- background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f9efea' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f9efea' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
}
option {
- background: var(--bg);
- color: var(--fg);
- padding: var(--space-sm);
+ background: var(--bg);
+ color: var(--fg);
+ padding: var(--space-sm);
}
option:checked {
- background: linear-gradient(var(--primary), var(--primary));
- color: var(--bg);
+ background: linear-gradient(var(--primary), var(--primary));
+ color: var(--bg);
}
input[type="checkbox"],
input[type="radio"] {
- appearance: none;
- width: 1.3rem;
- height: 1.3rem;
- min-width: 1.3rem;
- min-height: 1.3rem;
- padding: 0;
- cursor: pointer;
- margin: 0 0.5rem 0 0;
- vertical-align: middle;
- border: 2px inset var(--border-light);
- box-shadow:
- inset 1px 1px 0 var(--lowlight),
- inset -1px -1px 0 var(--highlight);
- background: var(--surface-alt);
- display: inline-flex;
- align-items: center;
- justify-content: center;
- flex-shrink: 0;
- font-weight: normal;
+ appearance: none;
+ width: 1.3rem;
+ height: 1.3rem;
+ min-width: 1.3rem;
+ min-height: 1.3rem;
+ padding: 0;
+ cursor: pointer;
+ margin: 0 0.5rem 0 0;
+ vertical-align: middle;
+ border: 2px inset var(--border-light);
+ box-shadow: inset 1px 1px 0 var(--lowlight), inset -1px -1px 0 var(--highlight);
+ background: var(--surface-alt);
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ font-weight: normal;
}
input[type="radio"] {
- border-radius: 50%;
+ border-radius: 50%;
}
input[type="checkbox"]:checked,
input[type="radio"]:checked {
- background: var(--primary);
- border-style: inset;
+ background: var(--primary);
+ border-style: inset;
}
label {
- display: block;
- margin-bottom: var(--space-xs);
- font-weight: bold;
- color: var(--fg);
+ display: block;
+ margin-bottom: var(--space-xs);
+ font-weight: bold;
+ color: var(--fg);
}
input[type="checkbox"] + label,
input[type="radio"] + label {
- display: inline;
- margin: 0;
- font-weight: normal;
+ display: inline;
+ margin: 0;
+ font-weight: normal;
}
/* toggle switches */
input[type="checkbox"].toggle {
- appearance: none;
- width: 2.8rem;
- height: 1.6rem;
- padding: 0;
- margin: 0 0.5rem 0 0;
- border: 2px outset var(--border-light);
- background: var(--muted);
- cursor: pointer;
- position: relative;
- vertical-align: middle;
- box-shadow:
- inset 1px 1px 0 rgba(255, 255, 255, 0.3),
- inset -1px -1px 0 rgba(0, 0, 0, 0.6);
- transition: background 0.2s;
+ appearance: none;
+ width: 2.8rem;
+ height: 1.6rem;
+ padding: 0;
+ margin: 0 0.5rem 0 0;
+ border: 2px outset var(--border-light);
+ background: var(--muted);
+ cursor: pointer;
+ position: relative;
+ vertical-align: middle;
+ box-shadow: inset 1px 1px 0 rgba(255, 255, 255, 0.3), inset -1px -1px 0 rgba(0, 0, 0, 0.6);
+ transition: background 0.2s;
}
input[type="checkbox"].toggle:checked {
- background: var(--primary);
+ background: var(--primary);
}
input[type="checkbox"].toggle::after {
- content: "";
- position: absolute;
- width: 0.6rem;
- height: 0.6rem;
- background: var(--surface);
- border: 2px outset var(--border-light);
- top: 50%;
- transform: translateY(-50%);
- left: 0.2rem;
- transition: left 0.2s;
- box-shadow:
- inset 1px 1px 0 var(--highlight),
- inset -1px -1px 0 var(--lowlight);
+ content: "";
+ position: absolute;
+ width: 0.6rem;
+ height: 0.6rem;
+ background: var(--surface);
+ border: 2px outset var(--border-light);
+ top: 50%;
+ transform: translateY(-50%);
+ left: 0.2rem;
+ transition: left 0.2s;
+ box-shadow: inset 1px 1px 0 var(--highlight), inset -1px -1px 0 var(--lowlight);
}
input[type="checkbox"].toggle:checked::after {
- left: 1.5rem;
+ left: 1.5rem;
}
[data-theme="dark"] input[type="checkbox"].toggle {
- background: var(--secondary);
+ background: var(--secondary);
}
[data-theme="dark"] input[type="checkbox"].toggle:checked {
- background: var(--primary);
+ background: var(--primary);
}
[data-theme="dark"] input[type="checkbox"].toggle::after {
- background: var(--accent-brown-light);
+ background: var(--accent-brown-light);
}
#theme-toggle::before {
- content: "☾";
- position: absolute;
- right: 0.4rem;
- top: 50%;
- transform: translateY(-50%);
- font-size: 0.9rem;
- line-height: 1;
- color: var(--titlebar-fg);
- transition: opacity 0.2s;
+ content: "☾";
+ position: absolute;
+ right: 0.4rem;
+ top: 50%;
+ transform: translateY(-50%);
+ font-size: 0.9rem;
+ line-height: 1;
+ color: var(--titlebar-fg);
+ transition: opacity 0.2s;
}
#theme-toggle:checked::before {
- content: "☀";
- right: auto;
- left: 0.4rem;
+ content: "☀";
+ right: auto;
+ left: 0.4rem;
}
/* range sliders */
input[type="range"] {
- width: 100%;
- height: 2.2rem;
- background: transparent;
- cursor: pointer;
- appearance: none;
- vertical-align: middle;
+ width: 100%;
+ height: 2.2rem;
+ background: transparent;
+ cursor: pointer;
+ appearance: none;
+ vertical-align: middle;
}
input[type="range"]::-webkit-slider-thumb {
- appearance: none;
- width: 1.5rem;
- height: 1rem;
- margin-top: -0.25rem;
- background: linear-gradient(135deg, var(--primary-light) 0%, var(--primary) 50%, var(--primary-dark) 100%);
- border: 2px outset var(--border-light);
- cursor: pointer;
- box-shadow:
- inset 1px 1px 0 var(--highlight),
- inset -1px -1px 0 var(--lowlight),
- 2px 2px 0 rgba(0, 0, 0, 0.3),
- 3px 3px 0 rgba(0, 0, 0, 0.1);
+ appearance: none;
+ width: 1.5rem;
+ height: 1rem;
+ margin-top: -0.25rem;
+ background: linear-gradient(
+ 135deg,
+ var(--primary-light) 0%,
+ var(--primary) 50%,
+ var(--primary-dark) 100%
+ );
+ border: 2px outset var(--border-light);
+ cursor: pointer;
+ box-shadow:
+ inset 1px 1px 0 var(--highlight),
+ inset -1px -1px 0 var(--lowlight),
+ 2px 2px 0 rgba(0, 0, 0, 0.3),
+ 3px 3px 0 rgba(0, 0, 0, 0.1);
}
input[type="range"]::-webkit-slider-thumb:active {
- box-shadow:
- inset 1px 1px 0 var(--lowlight),
- inset -1px -1px 0 var(--highlight),
- 1px 1px 0 rgba(0, 0, 0, 0.2);
+ box-shadow: inset 1px 1px 0 var(--lowlight), inset -1px -1px 0 var(--highlight), 1px 1px 0
+ rgba(0, 0, 0, 0.2);
}
input[type="range"]::-moz-range-thumb {
- width: 1.5rem;
- height: 0.8rem;
- margin-top: -0.15rem;
- background: linear-gradient(135deg, var(--primary-light) 0%, var(--primary) 50%, var(--primary-dark) 100%);
- border: 2px outset var(--border-light);
- cursor: pointer;
- box-shadow:
- inset 1px 1px 0 var(--highlight),
- inset -1px -1px 0 var(--lowlight),
- 2px 2px 0 rgba(0, 0, 0, 0.3),
- 3px 3px 0 rgba(0, 0, 0, 0.1);
- border-radius: 0.3rem;
+ width: 1.5rem;
+ height: 0.8rem;
+ margin-top: -0.15rem;
+ background: linear-gradient(
+ 135deg,
+ var(--primary-light) 0%,
+ var(--primary) 50%,
+ var(--primary-dark) 100%
+ );
+ border: 2px outset var(--border-light);
+ cursor: pointer;
+ box-shadow:
+ inset 1px 1px 0 var(--highlight),
+ inset -1px -1px 0 var(--lowlight),
+ 2px 2px 0 rgba(0, 0, 0, 0.3),
+ 3px 3px 0 rgba(0, 0, 0, 0.1);
+ border-radius: 0.3rem;
}
input[type="range"]::-moz-range-thumb:active {
- box-shadow:
- inset 1px 1px 0 var(--lowlight),
- inset -1px -1px 0 var(--highlight),
- 1px 1px 0 rgba(0, 0, 0, 0.2);
+ box-shadow: inset 1px 1px 0 var(--lowlight), inset -1px -1px 0 var(--highlight), 1px 1px 0
+ rgba(0, 0, 0, 0.2);
}
input[type="range"]::-webkit-slider-runnable-track {
- background: linear-gradient(180deg,
- #c0c0c0 0%,
- #e8e8e8 1px,
- #dfdfdf 2px,
- #d0d0d0 100%);
- border: 2px inset var(--border-light);
- height: 0.8rem;
- box-shadow:
- inset 2px 2px 0 rgba(255, 255, 255, 0.8),
- inset -2px -2px 0 rgba(0, 0, 0, 0.4),
- inset 1px 1px 0 rgba(0, 0, 0, 0.1);
+ background: linear-gradient(180deg, #c0c0c0 0%, #e8e8e8 1px, #dfdfdf 2px, #d0d0d0 100%);
+ border: 2px inset var(--border-light);
+ height: 0.8rem;
+ box-shadow: inset 2px 2px 0 rgba(255, 255, 255, 0.8), inset -2px -2px 0 rgba(0, 0, 0, 0.4),
+ inset 1px 1px 0 rgba(0, 0, 0, 0.1);
}
input[type="range"]::-moz-range-track {
- background: transparent;
- border: none;
+ background: transparent;
+ border: none;
}
input[type="range"]::-moz-range-progress {
- background: linear-gradient(180deg,
- var(--secondary-light) 0%,
- var(--secondary) 50%,
- var(--secondary-dark) 100%);
- height: 0.8rem;
- border: 2px inset var(--border-light);
- box-shadow:
- inset 2px 2px 0 rgba(255, 255, 255, 0.6),
- inset -2px -2px 0 rgba(0, 0, 0, 0.3);
+ background: linear-gradient(
+ 180deg,
+ var(--secondary-light) 0%,
+ var(--secondary) 50%,
+ var(--secondary-dark) 100%
+ );
+ height: 0.8rem;
+ border: 2px inset var(--border-light);
+ box-shadow: inset 2px 2px 0 rgba(255, 255, 255, 0.6), inset -2px -2px 0 rgba(0, 0, 0, 0.3);
}
fieldset {
- border: 2px solid var(--border-light);
- padding: var(--space-md);
- margin: var(--space-md) 0;
- background: var(--surface);
- box-shadow:
- inset 1px 1px 0 rgba(255, 255, 255, 0.3),
- inset -1px -1px 0 rgba(0, 0, 0, 0.6);
+ border: 2px solid var(--border-light);
+ padding: var(--space-md);
+ margin: var(--space-md) 0;
+ background: var(--surface);
+ box-shadow: inset 1px 1px 0 rgba(255, 255, 255, 0.3), inset -1px -1px 0 rgba(0, 0, 0, 0.6);
}
fieldset > :last-child {
- margin-bottom: 0;
+ margin-bottom: 0;
}
legend {
- padding: 0 var(--space-xs);
- margin-left: calc(var(--space-xs) * -1);
- font-weight: bold;
- color: var(--fg);
- background: var(--surface);
+ padding: 0 var(--space-xs);
+ margin-left: calc(var(--space-xs) * -1);
+ font-weight: bold;
+ color: var(--fg);
+ background: var(--surface);
}
/* buttons */
button {
- font-family: var(--font-mono);
- font-weight: 700;
- padding: var(--space-xs) var(--space-sm);
- border: 2px outset var(--border-light);
- background: var(--surface);
- color: var(--fg);
- font-size: 0.875rem;
- box-shadow:
- inset 1px 1px 0 var(--highlight),
- inset -1px -1px 0 var(--lowlight),
- 2px 2px 0 rgba(0, 0, 0, 0.18);
- transition:
- transform 0.05s,
- box-shadow 0.05s,
- background 0.1s;
- cursor: pointer;
+ font-family: var(--font-mono);
+ font-weight: 700;
+ padding: var(--space-xs) var(--space-sm);
+ border: 2px outset var(--border-light);
+ background: var(--surface);
+ color: var(--fg);
+ font-size: 0.875rem;
+ box-shadow: inset 1px 1px 0 var(--highlight), inset -1px -1px 0 var(--lowlight), 2px 2px 0
+ rgba(0, 0, 0, 0.18);
+ transition: transform 0.05s, box-shadow 0.05s, background 0.1s;
+ cursor: pointer;
}
button:hover {
- background: var(--surface-alt);
+ background: var(--surface-alt);
}
button:active {
- transform: translate(1px, 1px);
- border-style: inset;
- box-shadow:
- inset 1px 1px 0 var(--lowlight),
- inset -1px -1px 0 var(--highlight);
+ transform: translate(1px, 1px);
+ border-style: inset;
+ box-shadow: inset 1px 1px 0 var(--lowlight), inset -1px -1px 0 var(--highlight);
}
/* button variants */
button.primary {
- background: var(--primary);
- color: var(--surface-alt);
+ background: var(--primary);
+ color: var(--surface-alt);
}
button.primary:hover {
- background: var(--primary-light);
+ background: var(--primary-light);
}
button.primary:active {
- background: var(--primary-dark);
+ background: var(--primary-dark);
}
button.secondary {
- background: var(--secondary);
- color: var(--fg);
+ background: var(--secondary);
+ color: var(--fg);
}
button.secondary:hover {
- background: var(--secondary-light);
+ background: var(--secondary-light);
}
button.secondary:active {
- background: var(--secondary-dark);
+ background: var(--secondary-dark);
}
button.success,
button.error,
button.warning,
button.info {
- color: var(--surface-alt);
+ color: var(--surface-alt);
}
button.success {
- background: var(--success);
+ background: var(--success);
}
button.error {
- background: var(--error);
+ background: var(--error);
}
button.warning {
- background: var(--warning);
+ background: var(--warning);
}
button.info {
- background: var(--info);
+ background: var(--info);
}
button.success:hover,
button.error:hover,
button.warning:hover,
button.info:hover {
- filter: brightness(1.06);
+ filter: brightness(1.06);
}
button.contrast {
- background: var(--fg);
- color: var(--surface-alt);
+ background: var(--fg);
+ color: var(--surface-alt);
}
button.contrast:hover {
- background: var(--muted);
+ background: var(--muted);
}
button:disabled {
- opacity: 0.6;
- cursor: not-allowed;
- transform: none !important;
+ opacity: 0.6;
+ cursor: not-allowed;
+ transform: none !important;
}
/* button groups */
.button-group {
- display: inline-flex;
- border: var(--border-width) solid var(--border);
- box-shadow:
- inset 1px 1px 0 var(--border-light),
- inset -1px -1px 0 var(--border-dark),
- 3px 3px 0 rgba(0, 0, 0, 0.12);
+ display: inline-flex;
+ border: var(--border-width) solid var(--border);
+ box-shadow: inset 1px 1px 0 var(--border-light), inset -1px -1px 0 var(--border-dark), 3px 3px 0
+ rgba(0, 0, 0, 0.12);
}
.button-group button {
- border: none;
- margin: 0;
- border-radius: 0;
- box-shadow: none;
+ border: none;
+ margin: 0;
+ border-radius: 0;
+ box-shadow: none;
}
.button-group button:not(:last-child) {
- border-right: 1px solid var(--border-dark);
+ border-right: 1px solid var(--border-dark);
}
.button-group button:hover {
- box-shadow: none;
- transform: none;
+ box-shadow: none;
+ transform: none;
}
.button-group button:active {
- box-shadow: none;
- transform: none;
+ box-shadow: none;
+ transform: none;
}
/* alerts & messages */
.alert {
- padding: var(--space-md);
- margin: var(--space-md) 0;
- border: var(--border-width) solid var(--border);
- border-left: 4px solid var(--info);
- background: var(--surface);
- box-shadow:
- inset 1px 1px 0 var(--border-light),
- inset -1px -1px 0 var(--border-dark),
- 3px 3px 0 rgba(0, 0, 0, 0.12);
+ padding: var(--space-md);
+ margin: var(--space-md) 0;
+ border: var(--border-width) solid var(--border);
+ border-left: 4px solid var(--info);
+ background: var(--surface);
+ box-shadow: inset 1px 1px 0 var(--border-light), inset -1px -1px 0 var(--border-dark), 3px 3px 0
+ rgba(0, 0, 0, 0.12);
}
.alert.success {
- border-left-color: var(--success);
- background-color: color-mix(in srgb, var(--success) 10%, transparent);
+ border-left-color: var(--success);
+ background-color: color-mix(in srgb, var(--success) 10%, transparent);
}
.alert.error {
- border-left-color: var(--error);
- background-color: color-mix(in srgb, var(--error) 10%, transparent);
+ border-left-color: var(--error);
+ background-color: color-mix(in srgb, var(--error) 10%, transparent);
}
.alert.warning {
- border-left-color: var(--warning);
- background-color: color-mix(in srgb, var(--warning) 10%, transparent);
+ border-left-color: var(--warning);
+ background-color: color-mix(in srgb, var(--warning) 10%, transparent);
}
.alert.info {
- border-left-color: var(--info);
- background-color: color-mix(in srgb, var(--info) 10%, transparent);
+ border-left-color: var(--info);
+ background-color: color-mix(in srgb, var(--info) 10%, transparent);
}
/* badges & pills */
.badge {
- display: inline-block;
- padding: 0.25rem 0.5rem;
- margin: 0 0.25rem;
- background: var(--surface-alt);
- color: var(--fg);
- font-size: 0.75rem;
- font-weight: 700;
- border: 1px solid var(--border-dark);
- box-shadow:
- inset 1px 1px 0 var(--border-light),
- inset -1px -1px 0 var(--border-dark);
+ display: inline-block;
+ padding: 0.25rem 0.5rem;
+ margin: 0 0.25rem;
+ background: var(--surface-alt);
+ color: var(--fg);
+ font-size: 0.75rem;
+ font-weight: 700;
+ border: 1px solid var(--border-dark);
+ box-shadow: inset 1px 1px 0 var(--border-light), inset -1px -1px 0 var(--border-dark);
}
.badge.primary {
- background: var(--primary);
- color: var(--surface-alt);
+ background: var(--primary);
+ color: var(--surface-alt);
}
.badge.success {
- background: var(--success);
- color: var(--surface-alt);
+ background: var(--success);
+ color: var(--surface-alt);
}
.badge.error {
- background: var(--error);
- color: var(--surface-alt);
+ background: var(--error);
+ color: var(--surface-alt);
}
.badge.warning {
- background: var(--warning);
- color: var(--surface-alt);
+ background: var(--warning);
+ color: var(--surface-alt);
}
.badge.info {
- background: var(--info);
- color: var(--surface-alt);
+ background: var(--info);
+ color: var(--surface-alt);
}
.badge.contrast {
- background: var(--fg);
- color: var(--surface-alt);
+ background: var(--fg);
+ color: var(--surface-alt);
}
/* helpers */
.text-success {
- color: var(--success);
- font-weight: bold;
+ color: var(--success);
+ font-weight: bold;
}
.text-error {
- color: var(--error);
- font-weight: bold;
+ color: var(--error);
+ font-weight: bold;
}
.text-warning {
- color: var(--warning);
- font-weight: bold;
+ color: var(--warning);
+ font-weight: bold;
}
.text-info {
- color: var(--info);
- font-weight: bold;
+ color: var(--info);
+ font-weight: bold;
}
.text-muted {
- color: var(--muted);
+ color: var(--muted);
}
.text-contrast {
- color: var(--fg);
- font-weight: bold;
+ color: var(--fg);
+ font-weight: bold;
}
.text-center {
- text-align: center;
+ text-align: center;
}
.text-right {
- text-align: right;
+ text-align: right;
}
.text-left {
- text-align: left;
+ text-align: left;
}
-.mt-xs { margin-top: var(--space-xs); }
-.mt-sm { margin-top: var(--space-sm); }
-.mt-md { margin-top: var(--space-md); }
-.mt-lg { margin-top: var(--space-lg); }
-.mt-xl { margin-top: var(--space-xl); }
+.mt-xs {
+ margin-top: var(--space-xs);
+}
+.mt-sm {
+ margin-top: var(--space-sm);
+}
+.mt-md {
+ margin-top: var(--space-md);
+}
+.mt-lg {
+ margin-top: var(--space-lg);
+}
+.mt-xl {
+ margin-top: var(--space-xl);
+}
-.mb-xs { margin-bottom: var(--space-xs); }
-.mb-sm { margin-bottom: var(--space-sm); }
-.mb-md { margin-bottom: var(--space-md); }
-.mb-lg { margin-bottom: var(--space-lg); }
-.mb-xl { margin-bottom: var(--space-xl); }
+.mb-xs {
+ margin-bottom: var(--space-xs);
+}
+.mb-sm {
+ margin-bottom: var(--space-sm);
+}
+.mb-md {
+ margin-bottom: var(--space-md);
+}
+.mb-lg {
+ margin-bottom: var(--space-lg);
+}
+.mb-xl {
+ margin-bottom: var(--space-xl);
+}
.mx-auto {
- margin-left: auto;
- margin-right: auto;
+ margin-left: auto;
+ margin-right: auto;
}
.py-md {
- padding-top: var(--space-md);
- padding-bottom: var(--space-md);
+ padding-top: var(--space-md);
+ padding-bottom: var(--space-md);
}
#theme-toggle {
- margin-left: auto;
- margin-bottom: 0;
+ margin-left: auto;
+ margin-bottom: 0;
}
/* fairy dust */
@keyframes fairy-float {
- 0% {
- opacity: 1;
- transform: translateY(0) scale(1);
- }
- 100% {
- opacity: 0;
- transform: translateY(40px) scale(0.5);
- }
+ 0% {
+ opacity: 1;
+ transform: translateY(0) scale(1);
+ }
+ 100% {
+ opacity: 0;
+ transform: translateY(40px) scale(0.5);
+ }
}