@semanticus/semanticus-css 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE +53 -0
- package/README.md +151 -0
- package/dist/semanticus-semantics.css +2 -0
- package/dist/semanticus-utilities.css +7 -0
- package/dist/semanticus-variants.css +1 -0
- package/dist/semanticus.css +7 -0
- package/dist/semanticus.palette.amber.css +1 -0
- package/dist/semanticus.palette.blue.css +1 -0
- package/dist/semanticus.palette.cyan.css +1 -0
- package/dist/semanticus.palette.fuchsia.css +1 -0
- package/dist/semanticus.palette.green.css +1 -0
- package/dist/semanticus.palette.grey.css +1 -0
- package/dist/semanticus.palette.indigo.css +1 -0
- package/dist/semanticus.palette.jade.css +1 -0
- package/dist/semanticus.palette.lime.css +1 -0
- package/dist/semanticus.palette.orange.css +1 -0
- package/dist/semanticus.palette.pink.css +1 -0
- package/dist/semanticus.palette.pumpkin.css +1 -0
- package/dist/semanticus.palette.purple.css +1 -0
- package/dist/semanticus.palette.red.css +1 -0
- package/dist/semanticus.palette.sand.css +1 -0
- package/dist/semanticus.palette.slate.css +1 -0
- package/dist/semanticus.palette.violet.css +1 -0
- package/dist/semanticus.palette.yellow.css +1 -0
- package/dist/semanticus.palette.zinc.css +1 -0
- package/dist/semanticus.size.slim.css +1 -0
- package/package.json +102 -0
- package/src/_normalize.css +214 -0
- package/src/_variables.css +863 -0
- package/src/index.css +20 -0
- package/src/palettes/amber.css +56 -0
- package/src/palettes/blue.css +56 -0
- package/src/palettes/cyan.css +56 -0
- package/src/palettes/fuchsia.css +56 -0
- package/src/palettes/green.css +56 -0
- package/src/palettes/grey.css +56 -0
- package/src/palettes/indigo.css +56 -0
- package/src/palettes/jade.css +56 -0
- package/src/palettes/lime.css +56 -0
- package/src/palettes/orange.css +56 -0
- package/src/palettes/pink.css +56 -0
- package/src/palettes/pumpkin.css +56 -0
- package/src/palettes/purple.css +56 -0
- package/src/palettes/red.css +56 -0
- package/src/palettes/sand.css +56 -0
- package/src/palettes/slate.css +56 -0
- package/src/palettes/violet.css +56 -0
- package/src/palettes/yellow.css +56 -0
- package/src/palettes/zinc.css +56 -0
- package/src/semantics/_aria-busy.css +34 -0
- package/src/semantics/_article.css +6 -0
- package/src/semantics/_body.css +10 -0
- package/src/semantics/_button.css +106 -0
- package/src/semantics/_code.css +50 -0
- package/src/semantics/_details.css +292 -0
- package/src/semantics/_dialog.css +163 -0
- package/src/semantics/_document.css +18 -0
- package/src/semantics/_embedded.css +41 -0
- package/src/semantics/_figure.css +13 -0
- package/src/semantics/_hidden.css +7 -0
- package/src/semantics/_hr.css +10 -0
- package/src/semantics/_input.css +306 -0
- package/src/semantics/_links.css +33 -0
- package/src/semantics/_main.css +3 -0
- package/src/semantics/_nav.css +116 -0
- package/src/semantics/_progress.css +62 -0
- package/src/semantics/_role-group-search.css +129 -0
- package/src/semantics/_role-toolbar.css +17 -0
- package/src/semantics/_role-tooltip.css +138 -0
- package/src/semantics/_section.css +6 -0
- package/src/semantics/_table.css +28 -0
- package/src/semantics/_type-checkbox-radio.css +142 -0
- package/src/semantics/_type-color.css +22 -0
- package/src/semantics/_type-date.css +40 -0
- package/src/semantics/_type-file.css +26 -0
- package/src/semantics/_type-range.css +90 -0
- package/src/semantics/_type-search.css +34 -0
- package/src/semantics/_typography.css +137 -0
- package/src/semantics/index.css +14 -0
- package/src/semantics/modules.css +35 -0
- package/src/sizes/slim.css +12 -0
- package/src/utilities/_variables.css +244 -0
- package/src/utilities/borders/_border-radius.css +216 -0
- package/src/utilities/borders/_border-style.css +39 -0
- package/src/utilities/borders/_border-width.css +39 -0
- package/src/utilities/colors/_background-colors.css +209 -0
- package/src/utilities/colors/_border-colors.css +69 -0
- package/src/utilities/colors/_text-colors.css +371 -0
- package/src/utilities/display/_display.css +259 -0
- package/src/utilities/display/_overflow.css +47 -0
- package/src/utilities/display/_visibility.css +27 -0
- package/src/utilities/effects/_opacity.css +19 -0
- package/src/utilities/effects/_shadows.css +48 -0
- package/src/utilities/effects/_transforms.css +11 -0
- package/src/utilities/index.css +14 -0
- package/src/utilities/layout/_flexbox.css +846 -0
- package/src/utilities/layout/_grid.css +51 -0
- package/src/utilities/layout/_misc.css +77 -0
- package/src/utilities/media/_object-fit.css +139 -0
- package/src/utilities/modules.css +56 -0
- package/src/utilities/positioning/_floats.css +72 -0
- package/src/utilities/positioning/_inset.css +47 -0
- package/src/utilities/positioning/_position.css +108 -0
- package/src/utilities/positioning/_z-index.css +19 -0
- package/src/utilities/sizing/_height.css +31 -0
- package/src/utilities/sizing/_width.css +31 -0
- package/src/utilities/spacing/_gap.css +393 -0
- package/src/utilities/spacing/_margin.css +1030 -0
- package/src/utilities/spacing/_padding.css +885 -0
- package/src/utilities/typography/_font-family.css +7 -0
- package/src/utilities/typography/_font-sizes.css +38 -0
- package/src/utilities/typography/_font-weight.css +51 -0
- package/src/utilities/typography/_text-alignment.css +141 -0
- package/src/variants/_card.css +41 -0
- package/src/variants/_container.css +36 -0
- package/src/variants/_contrast.css +50 -0
- package/src/variants/_ghost.css +58 -0
- package/src/variants/_secondary.css +38 -0
- package/src/variants/_striped.css +10 -0
- package/src/variants/index.css +6 -0
- package/src/variants/modules.css +12 -0
|
@@ -0,0 +1,863 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Consolidated Theme Variables
|
|
4
|
+
============================
|
|
5
|
+
|
|
6
|
+
This file defines the semantic theme variables for Semanticus CSS.
|
|
7
|
+
- Semantic colors: Theme-aware variables for light/dark modes using
|
|
8
|
+
--color-primary, --color-secondary, and --color-contrast roles
|
|
9
|
+
- Layout variables: Typography, spacing, and component sizing
|
|
10
|
+
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/* ==========================================================================
|
|
14
|
+
1. Base Tokens
|
|
15
|
+
========================================================================== */
|
|
16
|
+
|
|
17
|
+
:root {
|
|
18
|
+
--transparent: transparent;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* ==========================================================================
|
|
22
|
+
2. Typography & Layout Variables (from Pico Theme)
|
|
23
|
+
========================================================================== */
|
|
24
|
+
|
|
25
|
+
:root,
|
|
26
|
+
:host {
|
|
27
|
+
/* Font Families */
|
|
28
|
+
--font-family-emoji: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
29
|
+
--font-family-sans-serif: system-ui, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, Helvetica, Arial, "Helvetica Neue", sans-serif, var(--font-family-emoji);
|
|
30
|
+
--font-family-monospace: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace, var(--font-family-emoji);
|
|
31
|
+
--font-family: var(--font-family-sans-serif);
|
|
32
|
+
|
|
33
|
+
/* Typography – base defaults inherited by all elements */
|
|
34
|
+
--line-height: 1.5;
|
|
35
|
+
--font-weight: 400;
|
|
36
|
+
--font-size: 100%; /* Root font-size; overridden per breakpoint below and per element in §6 */
|
|
37
|
+
--text-underline-offset: 0.1rem;
|
|
38
|
+
|
|
39
|
+
/* Borders & Effects – global defaults for border-radius, border-width, outline, and transition */
|
|
40
|
+
--border-radius: 0.25rem;
|
|
41
|
+
--border-width: 0.0625rem; /* 1px – base border width used by forms, tables, etc. */
|
|
42
|
+
--outline-width: 0.125rem; /* 2px – focus-ring width */
|
|
43
|
+
--transition: 0.2s ease-in-out; /* Default transition timing for interactive state changes */
|
|
44
|
+
|
|
45
|
+
/* Spacing – shared base unit used for padding, margins, and gaps throughout the layout */
|
|
46
|
+
--spacing: 1rem;
|
|
47
|
+
--typography-spacing-vertical: 1rem; /* Vertical margin below typographic elements (p, lists, etc.) */
|
|
48
|
+
--block-spacing-vertical: var(--spacing); /* Vertical padding inside block-level components (cards, modals, etc.) */
|
|
49
|
+
--block-spacing-horizontal: var(--spacing); /* Horizontal padding inside block-level components */
|
|
50
|
+
--grid-column-gap: var(--spacing); /* Column gap in CSS Grid layouts */
|
|
51
|
+
--grid-row-gap: var(--spacing); /* Row gap in CSS Grid layouts */
|
|
52
|
+
--form-element-spacing-vertical: 0.75rem; /* Vertical padding inside form inputs, selects, and textareas */
|
|
53
|
+
--form-element-spacing-horizontal: 1rem; /* Horizontal padding inside form inputs, selects, and textareas */
|
|
54
|
+
|
|
55
|
+
/* Shadows – used by [role="group"] and [role="search"] button/input combos */
|
|
56
|
+
--group-shadow: 0 0 0 rgba(0, 0, 0, 0); /* Default (no shadow) */
|
|
57
|
+
--group-shadow-focus-with-button: 0 0 0 var(--outline-width) var(--color-primary-focus); /* Focus ring when a button inside the group is focused */
|
|
58
|
+
--group-shadow-focus-with-input: 0 0 0 0.0625rem var(--form-border-color); /* Focus ring when an input inside the group is focused */
|
|
59
|
+
|
|
60
|
+
/* Modal – backdrop overlay settings */
|
|
61
|
+
--modal-overlay-backdrop-filter: blur(0.375rem); /* Applies a blur behind the modal overlay */
|
|
62
|
+
|
|
63
|
+
/* Navigation – spacing and breadcrumb configuration */
|
|
64
|
+
--nav-element-spacing-vertical: 1rem; /* Vertical padding for nav container items */
|
|
65
|
+
--nav-element-spacing-horizontal: 0.5rem; /* Horizontal padding for nav container items */
|
|
66
|
+
--nav-link-spacing-vertical: 0.5rem; /* Vertical padding inside nav links */
|
|
67
|
+
--nav-link-spacing-horizontal: 0.5rem; /* Horizontal padding inside nav links */
|
|
68
|
+
--nav-breadcrumb-divider: ">"; /* Character displayed between breadcrumb items */
|
|
69
|
+
|
|
70
|
+
/* Icons – inline SVG data-URIs used by form elements and UI components */
|
|
71
|
+
--icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); /* Checkmark for checked checkboxes */
|
|
72
|
+
--icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); /* Minus icon for indeterminate checkboxes */
|
|
73
|
+
--icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' 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"); /* Dropdown arrow for <select> elements */
|
|
74
|
+
--icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); /* Calendar icon for date inputs */
|
|
75
|
+
--icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); /* Clock icon for time inputs */
|
|
76
|
+
--icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); /* Magnifying glass for search inputs */
|
|
77
|
+
--icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); /* X icon for close/dismiss actions (e.g. modal close button) */
|
|
78
|
+
--icon-loading: url("data:image/svg+xml,%3Csvg fill='none' height='24' width='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' %3E%3Cstyle%3E g %7B animation: rotate 2s linear infinite; transform-origin: center center; %7D circle %7B stroke-dasharray: 75,100; stroke-dashoffset: -5; animation: dash 1.5s ease-in-out infinite; stroke-linecap: round; %7D @keyframes rotate %7B 0%25 %7B transform: rotate(0deg); %7D 100%25 %7B transform: rotate(360deg); %7D %7D @keyframes dash %7B 0%25 %7B stroke-dasharray: 1,100; stroke-dashoffset: 0; %7D 50%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -17.5; %7D 100%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -62; %7D %7D %3C/style%3E%3Cg%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='rgb(136, 145, 164)' stroke-width='4' /%3E%3C/g%3E%3C/svg%3E"); /* Animated spinner for [aria-busy="true"] elements */
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Responsive Font Sizes – progressively increase root font-size at wider viewports */
|
|
82
|
+
@media (min-width: 576px) {
|
|
83
|
+
:root,
|
|
84
|
+
:host {
|
|
85
|
+
--font-size: 106.25%;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@media (min-width: 768px) {
|
|
90
|
+
:root,
|
|
91
|
+
:host {
|
|
92
|
+
--font-size: 112.5%;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@media (min-width: 1024px) {
|
|
97
|
+
:root,
|
|
98
|
+
:host {
|
|
99
|
+
--font-size: 118.75%;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@media (min-width: 1280px) {
|
|
104
|
+
:root,
|
|
105
|
+
:host {
|
|
106
|
+
--font-size: 125%;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@media (min-width: 1536px) {
|
|
111
|
+
:root,
|
|
112
|
+
:host {
|
|
113
|
+
--font-size: 131.25%;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* ==========================================================================
|
|
118
|
+
3. Semantic Colors - Light Theme (Default)
|
|
119
|
+
==========================================================================
|
|
120
|
+
|
|
121
|
+
Color variable naming convention used throughout sections 3–5:
|
|
122
|
+
|
|
123
|
+
--color-{role} Text color for links, buttons, and inline elements
|
|
124
|
+
--color-{role}-bg Background fill (e.g. button backgrounds)
|
|
125
|
+
--color-{role}-border Border color (usually matches -bg)
|
|
126
|
+
--color-{role}-underline Semi-transparent underline for links
|
|
127
|
+
--color-{role}-hover Text color on hover
|
|
128
|
+
--color-{role}-hover-bg Background on hover
|
|
129
|
+
--color-{role}-focus Semi-transparent focus ring / outline color
|
|
130
|
+
--color-{role}-inverse Text on top of the filled -bg (e.g. white text on a colored button)
|
|
131
|
+
|
|
132
|
+
Roles: primary (brand CTA), secondary (neutral actions), contrast (high-emphasis)
|
|
133
|
+
========================================================================== */
|
|
134
|
+
|
|
135
|
+
[data-theme="light"],
|
|
136
|
+
:root:not([data-theme="dark"]),
|
|
137
|
+
:host(:not([data-theme="dark"])) {
|
|
138
|
+
color-scheme: light;
|
|
139
|
+
|
|
140
|
+
/* Status Colors */
|
|
141
|
+
--success-rgb: 43, 122, 76;
|
|
142
|
+
--info-rgb: 4, 120, 120;
|
|
143
|
+
--warning-rgb: 255, 191, 0;
|
|
144
|
+
--danger-rgb: 197, 47, 33;
|
|
145
|
+
|
|
146
|
+
/* Core Colors – page-level background, body text, and text selection highlight */
|
|
147
|
+
--color-background: #fff;
|
|
148
|
+
--color-text: #373c44;
|
|
149
|
+
--color-text-selection: rgba(2, 154, 232, 0.25); /* Highlight color when the user selects text */
|
|
150
|
+
--color-text-muted: #646b79; /* Subdued text for captions, hints, and secondary information */
|
|
151
|
+
--color-border-muted: rgb(231, 234, 239.5); /* Subtle border for dividers, table rows, and card edges */
|
|
152
|
+
|
|
153
|
+
/* Primary */
|
|
154
|
+
--color-primary: #0172ad;
|
|
155
|
+
--color-primary-bg: #0172ad;
|
|
156
|
+
--color-primary-border: var(--color-primary-bg);
|
|
157
|
+
--color-primary-underline: rgba(1, 114, 173, 0.5);
|
|
158
|
+
--color-primary-hover: #015887;
|
|
159
|
+
--color-primary-hover-bg: #02659a;
|
|
160
|
+
--color-primary-hover-border: var(--color-primary-hover-bg);
|
|
161
|
+
--color-primary-hover-underline: var(--color-primary-hover);
|
|
162
|
+
--color-primary-focus: rgba(2, 154, 232, 0.5);
|
|
163
|
+
--color-primary-inverse: #fff;
|
|
164
|
+
|
|
165
|
+
/* Secondary */
|
|
166
|
+
--color-secondary: #5d6b89;
|
|
167
|
+
--color-secondary-bg: #525f7a;
|
|
168
|
+
--color-secondary-border: var(--color-secondary-bg);
|
|
169
|
+
--color-secondary-underline: rgba(93, 107, 137, 0.5);
|
|
170
|
+
--color-secondary-hover: #48536b;
|
|
171
|
+
--color-secondary-hover-bg: #48536b;
|
|
172
|
+
--color-secondary-hover-border: var(--color-secondary-hover-bg);
|
|
173
|
+
--color-secondary-hover-underline: var(--color-secondary-hover);
|
|
174
|
+
--color-secondary-focus: rgba(93, 107, 137, 0.25);
|
|
175
|
+
--color-secondary-inverse: #fff;
|
|
176
|
+
|
|
177
|
+
/* Contrast */
|
|
178
|
+
--color-contrast: #181c25;
|
|
179
|
+
--color-contrast-bg: #181c25;
|
|
180
|
+
--color-contrast-border: var(--color-contrast-bg);
|
|
181
|
+
--color-contrast-underline: rgba(24, 28, 37, 0.5);
|
|
182
|
+
--color-contrast-hover: #000;
|
|
183
|
+
--color-contrast-hover-bg: #000;
|
|
184
|
+
--color-contrast-hover-border: var(--color-contrast-hover-bg);
|
|
185
|
+
--color-contrast-hover-underline: var(--color-contrast-hover);
|
|
186
|
+
--color-contrast-focus: rgba(93, 107, 137, 0.25);
|
|
187
|
+
--color-contrast-inverse: #fff;
|
|
188
|
+
|
|
189
|
+
/* Shadows – elevation levels used by cards, dropdowns, and other floating UI */
|
|
190
|
+
--shadow-sm: 0 0.0625rem 0.125rem rgba(129, 145, 181, 0.1); /* Subtle lift – e.g. buttons */
|
|
191
|
+
--shadow-md: 0.0625rem 0.125rem 0.5rem rgba(129, 145, 181, 0.15); /* Medium elevation – e.g. dropdowns */
|
|
192
|
+
--shadow-lg: 0.0145rem 0.029rem 0.174rem rgba(129, 145, 181, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(129, 145, 181, 0.024), 0.0625rem 0.125rem 0.75rem rgba(129, 145, 181, 0.03), 0.1125rem 0.225rem 1.35rem rgba(129, 145, 181, 0.036), 0.2085rem 0.417rem 2.502rem rgba(129, 145, 181, 0.04302), 0.5rem 1rem 6rem rgba(129, 145, 181, 0.06), 0 0 0 0.0625rem rgba(129, 145, 181, 0.015); /* Multi-layer realistic shadow – e.g. cards, modals */
|
|
193
|
+
|
|
194
|
+
/* Headings – progressively lighter shades from h1 (darkest) to h6 (lightest) */
|
|
195
|
+
--color-h1: #2d3138;
|
|
196
|
+
--color-h2: #373c44;
|
|
197
|
+
--color-h3: #424751;
|
|
198
|
+
--color-h4: #4d535e;
|
|
199
|
+
--color-h5: #5c6370;
|
|
200
|
+
--color-h6: #646b79;
|
|
201
|
+
|
|
202
|
+
/* Mark & Text – colors for <mark>, <ins>, and <del> elements */
|
|
203
|
+
--color-mark-bg: rgb(252.5, 230.5, 191.5); /* Background highlight for <mark> */
|
|
204
|
+
--color-mark-text: #0f1114; /* Text color inside <mark> */
|
|
205
|
+
|
|
206
|
+
/* Blockquote */
|
|
207
|
+
--blockquote-border-color: var(--color-border-muted);
|
|
208
|
+
--blockquote-footer-color: var(--color-text-muted);
|
|
209
|
+
|
|
210
|
+
/* Button – box-shadow values for resting and hovered states */
|
|
211
|
+
--button-shadow: 0 0 0 rgba(0, 0, 0, 0);
|
|
212
|
+
--button-shadow-hover: 0 0 0 rgba(0, 0, 0, 0);
|
|
213
|
+
|
|
214
|
+
/* Table – border and striped-row styling */
|
|
215
|
+
--table-border-color: var(--color-border-muted);
|
|
216
|
+
--table-row-stripe-bg: rgba(111, 120, 135, 0.0375); /* Background for alternating (striped) table rows */
|
|
217
|
+
|
|
218
|
+
/* Code – styling for <code>, <pre>, and <kbd> elements */
|
|
219
|
+
--color-code-bg: rgb(243, 244.5, 246.75); /* Background for inline <code> and <pre> blocks */
|
|
220
|
+
--color-code-text: #646b79; /* Text color inside code blocks */
|
|
221
|
+
--color-kbd-bg: var(--color-text); /* Background for <kbd> (keyboard key) elements */
|
|
222
|
+
--color-kbd-text: var(--color-background); /* Text color for <kbd> elements */
|
|
223
|
+
|
|
224
|
+
/* Form Elements – colors and state variants for inputs, selects, and textareas */
|
|
225
|
+
--form-bg: rgb(251, 251.5, 252.25); /* Default background */
|
|
226
|
+
--form-selected-bg: #dfe3eb; /* Background when an option is selected (e.g. <select>) */
|
|
227
|
+
--form-border-color: #cfd5e2;
|
|
228
|
+
--form-text-color: #23262c;
|
|
229
|
+
--form-placeholder-color: var(--color-text-muted); /* Placeholder text color */
|
|
230
|
+
--form-active-bg: #fff; /* Background when the field is focused / active */
|
|
231
|
+
--form-active-border: var(--color-primary-border); /* Border when focused */
|
|
232
|
+
--form-focus: var(--color-primary-border); /* Focus ring color */
|
|
233
|
+
--form-disabled-opacity: 0.5; /* Opacity applied to disabled form elements */
|
|
234
|
+
--form-invalid-border: rgb(var(--danger-rgb)); /* Border for invalid fields (idle) */
|
|
235
|
+
--form-invalid-active-border: rgb(var(--danger-rgb)); /* Border for invalid fields (focused) */
|
|
236
|
+
--form-invalid-focus: rgba(var(--danger-rgb), 0.5); /* Focus ring for invalid fields */
|
|
237
|
+
--form-valid-border: rgb(var(--success-rgb)); /* Border for valid fields (idle) */
|
|
238
|
+
--form-valid-active-border: rgb(var(--success-rgb)); /* Border for valid fields (focused) */
|
|
239
|
+
--form-valid-focus: rgba(var(--success-rgb), 0.5); /* Focus ring for valid fields */
|
|
240
|
+
|
|
241
|
+
/* Switch – toggle switch component (checkbox[role="switch"]) */
|
|
242
|
+
--switch-bg: #bfc7d9; /* Track background (unchecked) */
|
|
243
|
+
--switch-checked-bg: var(--color-primary-bg); /* Track background (checked) */
|
|
244
|
+
--switch-thumb-color: #fff; /* Thumb (knob) color */
|
|
245
|
+
--switch-thumb-shadow: 0 0 0 rgba(0, 0, 0, 0); /* Shadow on the thumb */
|
|
246
|
+
|
|
247
|
+
/* Range – <input type="range"> slider */
|
|
248
|
+
--range-border-color: #dfe3eb; /* Track border */
|
|
249
|
+
--range-active-border: #bfc7d9; /* Track border when active */
|
|
250
|
+
--range-thumb-border: var(--color-background); /* Border around the draggable thumb */
|
|
251
|
+
--range-thumb-color: var(--color-secondary-bg); /* Thumb fill color */
|
|
252
|
+
--range-thumb-active: var(--color-primary-bg); /* Thumb fill when actively dragging */
|
|
253
|
+
|
|
254
|
+
/* Accordion – <details> disclosure component */
|
|
255
|
+
--accordion-border: var(--color-border-muted);
|
|
256
|
+
--accordion-active-summary: var(--color-primary-hover); /* <summary> color while clicking */
|
|
257
|
+
--accordion-closed-summary: var(--color-text); /* <summary> color when accordion is closed */
|
|
258
|
+
--accordion-open-summary: var(--color-text-muted); /* <summary> color when accordion is open */
|
|
259
|
+
|
|
260
|
+
/* Card – container component for grouped content */
|
|
261
|
+
--card-bg: var(--color-background);
|
|
262
|
+
--card-border: var(--color-border-muted);
|
|
263
|
+
--card-shadow: var(--shadow-lg);
|
|
264
|
+
--card-section-bg: rgb(251, 251.5, 252.25); /* Background for header/footer sections inside a card */
|
|
265
|
+
|
|
266
|
+
/* Dropdown – flyout menu triggered by a <details> or button */
|
|
267
|
+
--dropdown-bg: #fff;
|
|
268
|
+
--dropdown-border: #eff1f4;
|
|
269
|
+
--dropdown-shadow: var(--shadow-lg);
|
|
270
|
+
--dropdown-text: var(--color-text);
|
|
271
|
+
--dropdown-hover-bg: #eff1f4; /* Background for the hovered item in the dropdown list */
|
|
272
|
+
|
|
273
|
+
/* Loading & Modal – overlay and spinner appearance */
|
|
274
|
+
--loading-spinner-opacity: 0.5; /* Opacity of the loading spinner icon */
|
|
275
|
+
--modal-overlay-bg: rgba(232, 234, 237, 0.75); /* Semi-transparent backdrop behind open modals */
|
|
276
|
+
|
|
277
|
+
/* Progress – <progress> bar styling */
|
|
278
|
+
--progress-bg: #dfe3eb; /* Track (empty) background */
|
|
279
|
+
--progress-fill: var(--color-primary-bg); /* Filled portion color */
|
|
280
|
+
|
|
281
|
+
/* Tooltip – floating label shown on [role="tooltip"] hover */
|
|
282
|
+
--tooltip-bg: var(--color-contrast-bg);
|
|
283
|
+
--tooltip-text: var(--color-contrast-inverse);
|
|
284
|
+
|
|
285
|
+
/* Icons – theme-aware validation icons (stroke color adapts to the theme) */
|
|
286
|
+
--icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(43, 122, 76)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); /* Checkmark shown on valid form fields */
|
|
287
|
+
--icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(197, 47, 33)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); /* Warning icon shown on invalid form fields */
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/*
|
|
291
|
+
* Override --form-focus to use the primary focus ring for actionable input types
|
|
292
|
+
* (submit, button, reset, checkbox, radio, file) in light mode.
|
|
293
|
+
* These inputs use a broader ring rather than the subtle 1px form focus.
|
|
294
|
+
*/
|
|
295
|
+
[data-theme="light"] input:is(
|
|
296
|
+
[type="submit"],
|
|
297
|
+
[type="button"],
|
|
298
|
+
[type="reset"],
|
|
299
|
+
[type="checkbox"],
|
|
300
|
+
[type="radio"],
|
|
301
|
+
[type="file"]
|
|
302
|
+
),
|
|
303
|
+
:root:not([data-theme="dark"]) input:is(
|
|
304
|
+
[type="submit"],
|
|
305
|
+
[type="button"],
|
|
306
|
+
[type="reset"],
|
|
307
|
+
[type="checkbox"],
|
|
308
|
+
[type="radio"],
|
|
309
|
+
[type="file"]
|
|
310
|
+
),
|
|
311
|
+
:host(:not([data-theme="dark"])) input:is(
|
|
312
|
+
[type="submit"],
|
|
313
|
+
[type="button"],
|
|
314
|
+
[type="reset"],
|
|
315
|
+
[type="checkbox"],
|
|
316
|
+
[type="radio"],
|
|
317
|
+
[type="file"]
|
|
318
|
+
) {
|
|
319
|
+
--form-focus: var(--color-primary-focus);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/* ==========================================================================
|
|
323
|
+
4. Semantic Colors - Dark Theme (System Preference)
|
|
324
|
+
==========================================================================
|
|
325
|
+
|
|
326
|
+
Applied when the user's OS is set to dark mode AND no explicit
|
|
327
|
+
data-theme attribute is present. Mirrors the variable structure
|
|
328
|
+
from §3 with adjusted values for dark backgrounds.
|
|
329
|
+
========================================================================== */
|
|
330
|
+
|
|
331
|
+
@media only screen and (prefers-color-scheme: dark) {
|
|
332
|
+
:root:not([data-theme]),
|
|
333
|
+
:host(:not([data-theme])) {
|
|
334
|
+
color-scheme: dark;
|
|
335
|
+
|
|
336
|
+
/* Status Colors */
|
|
337
|
+
--success-rgb: 110, 213, 157;
|
|
338
|
+
--info-rgb: 10, 194, 194;
|
|
339
|
+
--warning-rgb: 255, 191, 0;
|
|
340
|
+
--danger-rgb: 243, 143, 121;
|
|
341
|
+
|
|
342
|
+
/* Core Colors */
|
|
343
|
+
--color-background: rgb(19, 22.5, 30.5);
|
|
344
|
+
--color-text: #c2c7d0;
|
|
345
|
+
--color-text-selection: rgba(1, 170, 255, 0.1875);
|
|
346
|
+
--color-text-muted: #7b8495;
|
|
347
|
+
--color-border-muted: #202632;
|
|
348
|
+
|
|
349
|
+
/* Primary */
|
|
350
|
+
--color-primary: #01aaff;
|
|
351
|
+
--color-primary-bg: #0172ad;
|
|
352
|
+
--color-primary-border: var(--color-primary-bg);
|
|
353
|
+
--color-primary-underline: rgba(1, 170, 255, 0.5);
|
|
354
|
+
--color-primary-hover: #79c0ff;
|
|
355
|
+
--color-primary-hover-bg: #017fc0;
|
|
356
|
+
--color-primary-hover-border: var(--color-primary-hover-bg);
|
|
357
|
+
--color-primary-hover-underline: var(--color-primary-hover);
|
|
358
|
+
--color-primary-focus: rgba(1, 170, 255, 0.375);
|
|
359
|
+
--color-primary-inverse: #fff;
|
|
360
|
+
|
|
361
|
+
/* Secondary */
|
|
362
|
+
--color-secondary: #969eaf;
|
|
363
|
+
--color-secondary-bg: #525f7a;
|
|
364
|
+
--color-secondary-border: var(--color-secondary-bg);
|
|
365
|
+
--color-secondary-underline: rgba(150, 158, 175, 0.5);
|
|
366
|
+
--color-secondary-hover: #b3b9c5;
|
|
367
|
+
--color-secondary-hover-bg: #5d6b89;
|
|
368
|
+
--color-secondary-hover-border: var(--color-secondary-hover-bg);
|
|
369
|
+
--color-secondary-hover-underline: var(--color-secondary-hover);
|
|
370
|
+
--color-secondary-focus: rgba(144, 158, 190, 0.25);
|
|
371
|
+
--color-secondary-inverse: #fff;
|
|
372
|
+
|
|
373
|
+
/* Contrast */
|
|
374
|
+
--color-contrast: #dfe3eb;
|
|
375
|
+
--color-contrast-bg: #eff1f4;
|
|
376
|
+
--color-contrast-border: var(--color-contrast-bg);
|
|
377
|
+
--color-contrast-underline: rgba(223, 227, 235, 0.5);
|
|
378
|
+
--color-contrast-hover: #fff;
|
|
379
|
+
--color-contrast-hover-bg: #fff;
|
|
380
|
+
--color-contrast-hover-border: var(--color-contrast-hover-bg);
|
|
381
|
+
--color-contrast-hover-underline: var(--color-contrast-hover);
|
|
382
|
+
--color-contrast-focus: rgba(207, 213, 226, 0.25);
|
|
383
|
+
--color-contrast-inverse: #000;
|
|
384
|
+
|
|
385
|
+
/* Shadows */
|
|
386
|
+
--shadow-sm: 0 0.0625rem 0.125rem rgba(7, 8.5, 12, 0.1);
|
|
387
|
+
--shadow-md: 0.0625rem 0.125rem 0.5rem rgba(7, 8.5, 12, 0.15);
|
|
388
|
+
--shadow-lg: 0.0145rem 0.029rem 0.174rem rgba(7, 8.5, 12, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(7, 8.5, 12, 0.024), 0.0625rem 0.125rem 0.75rem rgba(7, 8.5, 12, 0.03), 0.1125rem 0.225rem 1.35rem rgba(7, 8.5, 12, 0.036), 0.2085rem 0.417rem 2.502rem rgba(7, 8.5, 12, 0.04302), 0.5rem 1rem 6rem rgba(7, 8.5, 12, 0.06), 0 0 0 0.0625rem rgba(7, 8.5, 12, 0.015);
|
|
389
|
+
|
|
390
|
+
/* Headings */
|
|
391
|
+
--color-h1: #f0f1f3;
|
|
392
|
+
--color-h2: #e0e3e7;
|
|
393
|
+
--color-h3: #c2c7d0;
|
|
394
|
+
--color-h4: #b3b9c5;
|
|
395
|
+
--color-h5: #a4acba;
|
|
396
|
+
--color-h6: #8891a4;
|
|
397
|
+
|
|
398
|
+
/* Mark & Text */
|
|
399
|
+
--color-mark-bg: #014063;
|
|
400
|
+
--color-mark-text: #fff;
|
|
401
|
+
|
|
402
|
+
/* Blockquote */
|
|
403
|
+
--blockquote-border-color: var(--color-border-muted);
|
|
404
|
+
--blockquote-footer-color: var(--color-text-muted);
|
|
405
|
+
|
|
406
|
+
/* Button */
|
|
407
|
+
--button-shadow: 0 0 0 rgba(0, 0, 0, 0);
|
|
408
|
+
--button-shadow-hover: 0 0 0 rgba(0, 0, 0, 0);
|
|
409
|
+
|
|
410
|
+
/* Table */
|
|
411
|
+
--table-border-color: var(--color-border-muted);
|
|
412
|
+
--table-row-stripe-bg: rgba(111, 120, 135, 0.0375);
|
|
413
|
+
|
|
414
|
+
/* Code */
|
|
415
|
+
--color-code-bg: rgb(26, 30.5, 40.25);
|
|
416
|
+
--color-code-text: #8891a4;
|
|
417
|
+
--color-kbd-bg: var(--color-text);
|
|
418
|
+
--color-kbd-text: var(--color-background);
|
|
419
|
+
|
|
420
|
+
/* Form Elements */
|
|
421
|
+
--form-bg: rgb(28, 33, 43.5);
|
|
422
|
+
--form-selected-bg: #2a3140;
|
|
423
|
+
--form-border-color: #2a3140;
|
|
424
|
+
--form-text-color: #e0e3e7;
|
|
425
|
+
--form-placeholder-color: #8891a4;
|
|
426
|
+
--form-active-bg: rgb(26, 30.5, 40.25);
|
|
427
|
+
--form-active-border: var(--color-primary-border);
|
|
428
|
+
--form-focus: var(--color-primary-border);
|
|
429
|
+
--form-disabled-opacity: 0.5;
|
|
430
|
+
--form-invalid-border: rgb(var(--danger-rgb));
|
|
431
|
+
--form-invalid-active-border: rgb(var(--danger-rgb));
|
|
432
|
+
--form-invalid-focus: rgba(var(--danger-rgb), 0.5);
|
|
433
|
+
--form-valid-border: rgb(var(--success-rgb));
|
|
434
|
+
--form-valid-active-border: rgb(var(--success-rgb));
|
|
435
|
+
--form-valid-focus: rgba(var(--success-rgb), 0.5);
|
|
436
|
+
|
|
437
|
+
/* Switch */
|
|
438
|
+
--switch-bg: #333c4e;
|
|
439
|
+
--switch-checked-bg: var(--color-primary-bg);
|
|
440
|
+
--switch-thumb-color: #fff;
|
|
441
|
+
--switch-thumb-shadow: 0 0 0 rgba(0, 0, 0, 0);
|
|
442
|
+
|
|
443
|
+
/* Range */
|
|
444
|
+
--range-border-color: #202632;
|
|
445
|
+
--range-active-border: #2a3140;
|
|
446
|
+
--range-thumb-border: var(--color-background);
|
|
447
|
+
--range-thumb-color: var(--color-secondary-bg);
|
|
448
|
+
--range-thumb-active: var(--color-primary-bg);
|
|
449
|
+
|
|
450
|
+
/* Accordion */
|
|
451
|
+
--accordion-border: var(--color-border-muted);
|
|
452
|
+
--accordion-active-summary: var(--color-primary-hover);
|
|
453
|
+
--accordion-closed-summary: var(--color-text);
|
|
454
|
+
--accordion-open-summary: var(--color-text-muted);
|
|
455
|
+
|
|
456
|
+
/* Card */
|
|
457
|
+
--card-bg: #181c25;
|
|
458
|
+
--card-border: var(--card-bg);
|
|
459
|
+
--card-shadow: var(--shadow-lg);
|
|
460
|
+
--card-section-bg: rgb(26, 30.5, 40.25);
|
|
461
|
+
|
|
462
|
+
/* Dropdown */
|
|
463
|
+
--dropdown-bg: #181c25;
|
|
464
|
+
--dropdown-border: #202632;
|
|
465
|
+
--dropdown-shadow: var(--shadow-lg);
|
|
466
|
+
--dropdown-text: var(--color-text);
|
|
467
|
+
--dropdown-hover-bg: #202632;
|
|
468
|
+
|
|
469
|
+
/* Loading & Modal */
|
|
470
|
+
--loading-spinner-opacity: 0.5;
|
|
471
|
+
--modal-overlay-bg: rgba(7.5, 8.5, 10, 0.75);
|
|
472
|
+
|
|
473
|
+
/* Progress */
|
|
474
|
+
--progress-bg: #202632;
|
|
475
|
+
--progress-fill: var(--color-primary-bg);
|
|
476
|
+
|
|
477
|
+
/* Tooltip */
|
|
478
|
+
--tooltip-bg: var(--color-contrast-bg);
|
|
479
|
+
--tooltip-text: var(--color-contrast-inverse);
|
|
480
|
+
|
|
481
|
+
/* Icons */
|
|
482
|
+
--icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(110, 213, 157)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
|
|
483
|
+
--icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(243, 143, 121)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
:root:not([data-theme]) input:is(
|
|
487
|
+
[type="submit"],
|
|
488
|
+
[type="button"],
|
|
489
|
+
[type="reset"],
|
|
490
|
+
[type="checkbox"],
|
|
491
|
+
[type="radio"],
|
|
492
|
+
[type="file"]
|
|
493
|
+
),
|
|
494
|
+
:host(:not([data-theme])) input:is(
|
|
495
|
+
[type="submit"],
|
|
496
|
+
[type="button"],
|
|
497
|
+
[type="reset"],
|
|
498
|
+
[type="checkbox"],
|
|
499
|
+
[type="radio"],
|
|
500
|
+
[type="file"]
|
|
501
|
+
) {
|
|
502
|
+
--form-focus: var(--color-primary-focus);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/* ==========================================================================
|
|
507
|
+
5. Semantic Colors - Dark Theme (Explicit)
|
|
508
|
+
==========================================================================
|
|
509
|
+
|
|
510
|
+
Applied when data-theme="dark" is set on the root element,
|
|
511
|
+
regardless of OS preference. Contains the same variable overrides
|
|
512
|
+
as §4 so both explicit and system-preference dark mode look identical.
|
|
513
|
+
========================================================================== */
|
|
514
|
+
|
|
515
|
+
[data-theme="dark"] {
|
|
516
|
+
color-scheme: dark;
|
|
517
|
+
|
|
518
|
+
/* Status Colors */
|
|
519
|
+
--success-rgb: 110, 213, 157;
|
|
520
|
+
--info-rgb: 10, 194, 194;
|
|
521
|
+
--warning-rgb: 255, 191, 0;
|
|
522
|
+
--danger-rgb: 243, 143, 121;
|
|
523
|
+
|
|
524
|
+
/* Core Colors */
|
|
525
|
+
--color-background: rgb(19, 22.5, 30.5);
|
|
526
|
+
--color-text: #c2c7d0;
|
|
527
|
+
--color-text-selection: rgba(1, 170, 255, 0.1875);
|
|
528
|
+
--color-text-muted: #7b8495;
|
|
529
|
+
--color-border-muted: #202632;
|
|
530
|
+
|
|
531
|
+
/* Primary */
|
|
532
|
+
--color-primary: #01aaff;
|
|
533
|
+
--color-primary-bg: #0172ad;
|
|
534
|
+
--color-primary-border: var(--color-primary-bg);
|
|
535
|
+
--color-primary-underline: rgba(1, 170, 255, 0.5);
|
|
536
|
+
--color-primary-hover: #79c0ff;
|
|
537
|
+
--color-primary-hover-bg: #017fc0;
|
|
538
|
+
--color-primary-hover-border: var(--color-primary-hover-bg);
|
|
539
|
+
--color-primary-hover-underline: var(--color-primary-hover);
|
|
540
|
+
--color-primary-focus: rgba(1, 170, 255, 0.375);
|
|
541
|
+
--color-primary-inverse: #fff;
|
|
542
|
+
|
|
543
|
+
/* Secondary */
|
|
544
|
+
--color-secondary: #969eaf;
|
|
545
|
+
--color-secondary-bg: #525f7a;
|
|
546
|
+
--color-secondary-border: var(--color-secondary-bg);
|
|
547
|
+
--color-secondary-underline: rgba(150, 158, 175, 0.5);
|
|
548
|
+
--color-secondary-hover: #b3b9c5;
|
|
549
|
+
--color-secondary-hover-bg: #5d6b89;
|
|
550
|
+
--color-secondary-hover-border: var(--color-secondary-hover-bg);
|
|
551
|
+
--color-secondary-hover-underline: var(--color-secondary-hover);
|
|
552
|
+
--color-secondary-focus: rgba(144, 158, 190, 0.25);
|
|
553
|
+
--color-secondary-inverse: #fff;
|
|
554
|
+
|
|
555
|
+
/* Contrast */
|
|
556
|
+
--color-contrast: #dfe3eb;
|
|
557
|
+
--color-contrast-bg: #eff1f4;
|
|
558
|
+
--color-contrast-border: var(--color-contrast-bg);
|
|
559
|
+
--color-contrast-underline: rgba(223, 227, 235, 0.5);
|
|
560
|
+
--color-contrast-hover: #fff;
|
|
561
|
+
--color-contrast-hover-bg: #fff;
|
|
562
|
+
--color-contrast-hover-border: var(--color-contrast-hover-bg);
|
|
563
|
+
--color-contrast-hover-underline: var(--color-contrast-hover);
|
|
564
|
+
--color-contrast-focus: rgba(207, 213, 226, 0.25);
|
|
565
|
+
--color-contrast-inverse: #000;
|
|
566
|
+
|
|
567
|
+
/* Shadows */
|
|
568
|
+
--shadow-sm: 0 0.0625rem 0.125rem rgba(7, 8.5, 12, 0.1);
|
|
569
|
+
--shadow-md: 0.0625rem 0.125rem 0.5rem rgba(7, 8.5, 12, 0.15);
|
|
570
|
+
--shadow-lg: 0.0145rem 0.029rem 0.174rem rgba(7, 8.5, 12, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(7, 8.5, 12, 0.024), 0.0625rem 0.125rem 0.75rem rgba(7, 8.5, 12, 0.03), 0.1125rem 0.225rem 1.35rem rgba(7, 8.5, 12, 0.036), 0.2085rem 0.417rem 2.502rem rgba(7, 8.5, 12, 0.04302), 0.5rem 1rem 6rem rgba(7, 8.5, 12, 0.06), 0 0 0 0.0625rem rgba(7, 8.5, 12, 0.015);
|
|
571
|
+
|
|
572
|
+
/* Headings */
|
|
573
|
+
--color-h1: #f0f1f3;
|
|
574
|
+
--color-h2: #e0e3e7;
|
|
575
|
+
--color-h3: #c2c7d0;
|
|
576
|
+
--color-h4: #b3b9c5;
|
|
577
|
+
--color-h5: #a4acba;
|
|
578
|
+
--color-h6: #8891a4;
|
|
579
|
+
|
|
580
|
+
/* Mark & Text */
|
|
581
|
+
--color-mark-bg: #014063;
|
|
582
|
+
--color-mark-text: #fff;
|
|
583
|
+
|
|
584
|
+
/* Blockquote */
|
|
585
|
+
--blockquote-border-color: var(--color-border-muted);
|
|
586
|
+
--blockquote-footer-color: var(--color-text-muted);
|
|
587
|
+
|
|
588
|
+
/* Button */
|
|
589
|
+
--button-shadow: 0 0 0 rgba(0, 0, 0, 0);
|
|
590
|
+
--button-shadow-hover: 0 0 0 rgba(0, 0, 0, 0);
|
|
591
|
+
|
|
592
|
+
/* Table */
|
|
593
|
+
--table-border-color: var(--color-border-muted);
|
|
594
|
+
--table-row-stripe-bg: rgba(111, 120, 135, 0.0375);
|
|
595
|
+
|
|
596
|
+
/* Code */
|
|
597
|
+
--color-code-bg: rgb(26, 30.5, 40.25);
|
|
598
|
+
--color-code-text: #8891a4;
|
|
599
|
+
--color-kbd-bg: var(--color-text);
|
|
600
|
+
--color-kbd-text: var(--color-background);
|
|
601
|
+
|
|
602
|
+
/* Form Elements */
|
|
603
|
+
--form-bg: rgb(28, 33, 43.5);
|
|
604
|
+
--form-selected-bg: #2a3140;
|
|
605
|
+
--form-border-color: #2a3140;
|
|
606
|
+
--form-text-color: #e0e3e7;
|
|
607
|
+
--form-placeholder-color: #8891a4;
|
|
608
|
+
--form-active-bg: rgb(26, 30.5, 40.25);
|
|
609
|
+
--form-active-border: var(--color-primary-border);
|
|
610
|
+
--form-focus: var(--color-primary-border);
|
|
611
|
+
--form-disabled-opacity: 0.5;
|
|
612
|
+
--form-invalid-border: rgb(var(--danger-rgb));
|
|
613
|
+
--form-invalid-active-border: rgb(var(--danger-rgb));
|
|
614
|
+
--form-invalid-focus: rgba(var(--danger-rgb), 0.5);
|
|
615
|
+
--form-valid-border: rgb(var(--success-rgb));
|
|
616
|
+
--form-valid-active-border: rgb(var(--success-rgb));
|
|
617
|
+
--form-valid-focus: rgba(var(--success-rgb), 0.5);
|
|
618
|
+
|
|
619
|
+
/* Switch */
|
|
620
|
+
--switch-bg: #333c4e;
|
|
621
|
+
--switch-checked-bg: var(--color-primary-bg);
|
|
622
|
+
--switch-thumb-color: #fff;
|
|
623
|
+
--switch-thumb-shadow: 0 0 0 rgba(0, 0, 0, 0);
|
|
624
|
+
|
|
625
|
+
/* Range */
|
|
626
|
+
--range-border-color: #202632;
|
|
627
|
+
--range-active-border: #2a3140;
|
|
628
|
+
--range-thumb-border: var(--color-background);
|
|
629
|
+
--range-thumb-color: var(--color-secondary-bg);
|
|
630
|
+
--range-thumb-active: var(--color-primary-bg);
|
|
631
|
+
|
|
632
|
+
/* Accordion */
|
|
633
|
+
--accordion-border: var(--color-border-muted);
|
|
634
|
+
--accordion-active-summary: var(--color-primary-hover);
|
|
635
|
+
--accordion-closed-summary: var(--color-text);
|
|
636
|
+
--accordion-open-summary: var(--color-text-muted);
|
|
637
|
+
|
|
638
|
+
/* Card */
|
|
639
|
+
--card-bg: #181c25;
|
|
640
|
+
--card-border: var(--card-bg);
|
|
641
|
+
--card-shadow: var(--shadow-lg);
|
|
642
|
+
--card-section-bg: rgb(26, 30.5, 40.25);
|
|
643
|
+
|
|
644
|
+
/* Dropdown */
|
|
645
|
+
--dropdown-bg: #181c25;
|
|
646
|
+
--dropdown-border: #202632;
|
|
647
|
+
--dropdown-shadow: var(--shadow-lg);
|
|
648
|
+
--dropdown-text: var(--color-text);
|
|
649
|
+
--dropdown-hover-bg: #202632;
|
|
650
|
+
|
|
651
|
+
/* Loading & Modal */
|
|
652
|
+
--loading-spinner-opacity: 0.5;
|
|
653
|
+
--modal-overlay-bg: rgba(7.5, 8.5, 10, 0.75);
|
|
654
|
+
|
|
655
|
+
/* Progress */
|
|
656
|
+
--progress-bg: #202632;
|
|
657
|
+
--progress-fill: var(--color-primary-bg);
|
|
658
|
+
|
|
659
|
+
/* Tooltip */
|
|
660
|
+
--tooltip-bg: var(--color-contrast-bg);
|
|
661
|
+
--tooltip-text: var(--color-contrast-inverse);
|
|
662
|
+
|
|
663
|
+
/* Icons */
|
|
664
|
+
--icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(110, 213, 157)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
|
|
665
|
+
--icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(243, 143, 121)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
/* Same actionable-input focus override as §3, applied for explicit dark mode */
|
|
669
|
+
[data-theme="dark"] input:is(
|
|
670
|
+
[type="submit"],
|
|
671
|
+
[type="button"],
|
|
672
|
+
[type="reset"],
|
|
673
|
+
[type="checkbox"],
|
|
674
|
+
[type="radio"],
|
|
675
|
+
[type="file"]
|
|
676
|
+
) {
|
|
677
|
+
--form-focus: var(--color-primary-focus);
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
/* ==========================================================================
|
|
681
|
+
6. Scoped Element Variables (from Pico Theme)
|
|
682
|
+
==========================================================================
|
|
683
|
+
|
|
684
|
+
These selectors override the global :root variables on a per-element
|
|
685
|
+
basis so each component can have its own defaults (font-size, weight,
|
|
686
|
+
line-height, border-radius, etc.) without class-name bloat.
|
|
687
|
+
========================================================================== */
|
|
688
|
+
|
|
689
|
+
/* Links get an underline by default */
|
|
690
|
+
a {
|
|
691
|
+
--text-decoration: underline;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
a.secondary,
|
|
695
|
+
a.contrast {
|
|
696
|
+
--text-decoration: underline;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
small {
|
|
700
|
+
--font-size: 0.875em;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/* Heading typography – per-level sizing and vertical spacing above each heading */
|
|
704
|
+
h1,
|
|
705
|
+
h2,
|
|
706
|
+
h3,
|
|
707
|
+
h4,
|
|
708
|
+
h5,
|
|
709
|
+
h6 {
|
|
710
|
+
--font-weight: 700;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
h1 {
|
|
714
|
+
--font-size: 2rem;
|
|
715
|
+
--line-height: 1.125;
|
|
716
|
+
--typography-spacing-top: 3rem; /* Extra top margin to separate from previous content */
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
h2 {
|
|
720
|
+
--font-size: 1.75rem;
|
|
721
|
+
--line-height: 1.15;
|
|
722
|
+
--typography-spacing-top: 2.625rem;
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
h3 {
|
|
726
|
+
--font-size: 1.5rem;
|
|
727
|
+
--line-height: 1.175;
|
|
728
|
+
--typography-spacing-top: 2.25rem;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
h4 {
|
|
732
|
+
--font-size: 1.25rem;
|
|
733
|
+
--line-height: 1.2;
|
|
734
|
+
--typography-spacing-top: 1.874rem;
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
h5 {
|
|
738
|
+
--font-size: 1.125rem;
|
|
739
|
+
--line-height: 1.225;
|
|
740
|
+
--typography-spacing-top: 1.6875rem;
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
h6 {
|
|
744
|
+
--font-size: 1rem;
|
|
745
|
+
--line-height: 1.25;
|
|
746
|
+
--typography-spacing-top: 1.5rem;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
/* Table head/foot cells get a bolder weight and a thicker bottom border */
|
|
750
|
+
thead th,
|
|
751
|
+
thead td,
|
|
752
|
+
tfoot th,
|
|
753
|
+
tfoot td {
|
|
754
|
+
--font-weight: 600;
|
|
755
|
+
--border-width: 0.1875rem;
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
pre,
|
|
759
|
+
code,
|
|
760
|
+
kbd,
|
|
761
|
+
samp {
|
|
762
|
+
--font-family: var(--font-family-monospace);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
kbd {
|
|
766
|
+
--font-weight: bolder;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/* Text-style form inputs use a thinner outline to distinguish from buttons */
|
|
770
|
+
input:not(
|
|
771
|
+
[type="submit"],
|
|
772
|
+
[type="button"],
|
|
773
|
+
[type="reset"],
|
|
774
|
+
[type="checkbox"],
|
|
775
|
+
[type="radio"],
|
|
776
|
+
[type="file"]
|
|
777
|
+
),
|
|
778
|
+
:where(select, textarea) {
|
|
779
|
+
--outline-width: 0.0625rem;
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
/* Pill-shaped border-radius for search inputs */
|
|
783
|
+
[type="search"] {
|
|
784
|
+
--border-radius: 5rem;
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
/* Checkboxes & radios use a slightly thicker border than text inputs */
|
|
788
|
+
[type="checkbox"],
|
|
789
|
+
[type="radio"] {
|
|
790
|
+
--border-width: 0.125rem;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
/* Toggle switches get an even thicker border for visual prominence */
|
|
794
|
+
[type="checkbox"][role="switch"] {
|
|
795
|
+
--border-width: 0.1875rem;
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
/* Pill-shaped border-radius for [role="search"] wrappers */
|
|
799
|
+
[role="search"] {
|
|
800
|
+
--border-radius: 5rem;
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
/*
|
|
804
|
+
* Focus ring overrides for grouped buttons:
|
|
805
|
+
* When a .secondary or .contrast button inside a [role="search"] or
|
|
806
|
+
* [role="group"] receives focus, the group ring matches that variant's
|
|
807
|
+
* focus color instead of the default primary.
|
|
808
|
+
*/
|
|
809
|
+
[role="search"]:has(
|
|
810
|
+
button.secondary:focus,
|
|
811
|
+
[type="submit"].secondary:focus,
|
|
812
|
+
[type="button"].secondary:focus,
|
|
813
|
+
[role="button"].secondary:focus
|
|
814
|
+
),
|
|
815
|
+
[role="group"]:has(
|
|
816
|
+
button.secondary:focus,
|
|
817
|
+
[type="submit"].secondary:focus,
|
|
818
|
+
[type="button"].secondary:focus,
|
|
819
|
+
[role="button"].secondary:focus
|
|
820
|
+
) {
|
|
821
|
+
--group-shadow-focus-with-button: 0 0 0 var(--outline-width) var(--color-secondary-focus);
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
[role="search"]:has(
|
|
825
|
+
button.contrast:focus,
|
|
826
|
+
[type="submit"].contrast:focus,
|
|
827
|
+
[type="button"].contrast:focus,
|
|
828
|
+
[role="button"].contrast:focus
|
|
829
|
+
),
|
|
830
|
+
[role="group"]:has(
|
|
831
|
+
button.contrast:focus,
|
|
832
|
+
[type="submit"].contrast:focus,
|
|
833
|
+
[type="button"].contrast:focus,
|
|
834
|
+
[role="button"].contrast:focus
|
|
835
|
+
) {
|
|
836
|
+
--group-shadow-focus-with-button: 0 0 0 var(--outline-width) var(--color-contrast-focus);
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
/* Buttons inside search/group combos get wider horizontal padding */
|
|
840
|
+
[role="search"] button,
|
|
841
|
+
[role="search"] [type="submit"],
|
|
842
|
+
[role="search"] [type="button"],
|
|
843
|
+
[role="search"] [role="button"],
|
|
844
|
+
[role="group"] button,
|
|
845
|
+
[role="group"] [type="submit"],
|
|
846
|
+
[role="group"] [type="button"],
|
|
847
|
+
[role="group"] [role="button"] {
|
|
848
|
+
--form-element-spacing-horizontal: 2rem;
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
/* ==========================================================================
|
|
852
|
+
7. Form Element Accent Color
|
|
853
|
+
==========================================================================
|
|
854
|
+
|
|
855
|
+
Sets the native browser accent-color for checkboxes, radios, and range
|
|
856
|
+
sliders so they match the primary brand color without needing custom styling.
|
|
857
|
+
========================================================================== */
|
|
858
|
+
|
|
859
|
+
[type="checkbox"],
|
|
860
|
+
[type="radio"],
|
|
861
|
+
[type="range"] {
|
|
862
|
+
accent-color: var(--color-primary);
|
|
863
|
+
}
|