style(frontend): Prettier config + one-time repo-wide format pass
Prettier 3 (pinned), printWidth 100, double quotes — chosen to match the existing hand-formatting and minimise reflow. This commit is ONLY the mechanical format pass (`prettier --write`) plus the config/ignore/scripts, isolated so it never pollutes a feature diff. Verified behaviour-neutral: typecheck, eslint (0 errors), and vitest all green before and after. See .git-blame-ignore-revs — `git blame` skips this sha.
This commit is contained in:
+217
-44
@@ -66,18 +66,102 @@ html[data-theme="light"] {
|
||||
doesn't scroll. Dark theme uses the dark backdrops, light theme the lighter set in /light/. Only
|
||||
when the backdrop is on (the "Background image" setting; off in perf). The [data-theme] qualifier
|
||||
also out-specifies the ambient `background` shorthand (which would else reset background-size). */
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="midnight"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/midnight.svg"); }
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="forest"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/forest.svg"); }
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="slate"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/slate.svg"); }
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="youtube"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/youtube.svg"); }
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="starship"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/starship.svg"); }
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="matrix"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/matrix.svg"); }
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="midnight"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/light/midnight.svg"); }
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="forest"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/light/forest.svg"); }
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="slate"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/light/slate.svg"); }
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="youtube"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/light/youtube.svg"); }
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="starship"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/light/starship.svg"); }
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="matrix"] body { background-image: linear-gradient(color-mix(in srgb, var(--bg) var(--bg-fade), transparent), color-mix(in srgb, var(--bg) var(--bg-fade), transparent)), url("/backdrops/light/matrix.svg"); }
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="midnight"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/midnight.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="forest"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/forest.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="slate"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/slate.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="youtube"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/youtube.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="starship"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/starship.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="dark"][data-scheme="matrix"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/matrix.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="midnight"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/light/midnight.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="forest"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/light/forest.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="slate"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/light/slate.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="youtube"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/light/youtube.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="starship"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/light/starship.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="light"][data-scheme="matrix"] body {
|
||||
background-image:
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--bg-fade), transparent)
|
||||
),
|
||||
url("/backdrops/light/matrix.svg");
|
||||
}
|
||||
html[data-backdrop="on"][data-theme="dark"] body,
|
||||
html[data-backdrop="on"][data-theme="light"] body {
|
||||
background-size: cover;
|
||||
@@ -106,9 +190,21 @@ body {
|
||||
subtle but a touch richer (three soft pools, incl. a bottom glow) now that the nav,
|
||||
header and dialogs are all frosted glass and refract it. */
|
||||
background:
|
||||
radial-gradient(1100px 620px at 10% -10%, color-mix(in srgb, var(--accent) calc(20% * var(--ambient)), transparent), transparent 60%),
|
||||
radial-gradient(1000px 720px at 115% 10%, color-mix(in srgb, var(--accent) calc(14% * var(--ambient)), transparent), transparent 55%),
|
||||
radial-gradient(900px 640px at 50% 118%, color-mix(in srgb, var(--accent) calc(11% * var(--ambient)), transparent), transparent 60%),
|
||||
radial-gradient(
|
||||
1100px 620px at 10% -10%,
|
||||
color-mix(in srgb, var(--accent) calc(20% * var(--ambient)), transparent),
|
||||
transparent 60%
|
||||
),
|
||||
radial-gradient(
|
||||
1000px 720px at 115% 10%,
|
||||
color-mix(in srgb, var(--accent) calc(14% * var(--ambient)), transparent),
|
||||
transparent 55%
|
||||
),
|
||||
radial-gradient(
|
||||
900px 640px at 50% 118%,
|
||||
color-mix(in srgb, var(--accent) calc(11% * var(--ambient)), transparent),
|
||||
transparent 60%
|
||||
),
|
||||
var(--bg);
|
||||
background-attachment: fixed;
|
||||
}
|
||||
@@ -130,12 +226,19 @@ body {
|
||||
The strong blur turns whatever is behind into soft colour, not a sharp image.
|
||||
Layer 1 (top) = the optional scrim; layer 2 = the translucent surface tint. */
|
||||
background:
|
||||
linear-gradient(color-mix(in srgb, var(--bg) var(--glass-scrim), transparent), color-mix(in srgb, var(--bg) var(--glass-scrim), transparent)),
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--glass-scrim), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--glass-scrim), transparent)
|
||||
),
|
||||
color-mix(in srgb, var(--surface) var(--glass-surface-alpha), transparent);
|
||||
backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturate));
|
||||
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturate));
|
||||
border: 1px solid color-mix(in srgb, var(--border) var(--glass-border-alpha), transparent);
|
||||
border-top-color: color-mix(in srgb, #fff var(--glass-edge), color-mix(in srgb, var(--border) var(--glass-border-alpha), transparent));
|
||||
border-top-color: color-mix(
|
||||
in srgb,
|
||||
#fff var(--glass-edge),
|
||||
color-mix(in srgb, var(--border) var(--glass-border-alpha), transparent)
|
||||
);
|
||||
box-shadow:
|
||||
inset 0 1px 0 color-mix(in srgb, #fff var(--glass-inset), transparent),
|
||||
0 18px 44px -16px rgba(0, 0, 0, 0.6);
|
||||
@@ -145,10 +248,17 @@ body {
|
||||
where blur adds almost nothing visually but is GPU-expensive and triggers reflow.
|
||||
Translucency + border + depth keep the look; blur is reserved for .glass overlays. */
|
||||
background:
|
||||
linear-gradient(color-mix(in srgb, var(--bg) var(--glass-scrim), transparent), color-mix(in srgb, var(--bg) var(--glass-scrim), transparent)),
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--glass-scrim), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--glass-scrim), transparent)
|
||||
),
|
||||
color-mix(in srgb, var(--card) var(--glass-card-alpha), transparent);
|
||||
border: 1px solid color-mix(in srgb, var(--border) 65%, transparent);
|
||||
border-top-color: color-mix(in srgb, #fff var(--glass-edge), color-mix(in srgb, var(--border) 65%, transparent));
|
||||
border-top-color: color-mix(
|
||||
in srgb,
|
||||
#fff var(--glass-edge),
|
||||
color-mix(in srgb, var(--border) 65%, transparent)
|
||||
);
|
||||
box-shadow:
|
||||
inset 0 1px 0 color-mix(in srgb, #fff calc(var(--glass-inset) / 2), transparent),
|
||||
0 8px 22px -14px rgba(0, 0, 0, 0.45);
|
||||
@@ -157,12 +267,19 @@ body {
|
||||
/* Floating menus/popovers hover over undimmed content (no backdrop scrim like dialogs),
|
||||
so they must be near-opaque to stay readable — only a hint of translucency + the blur. */
|
||||
background:
|
||||
linear-gradient(color-mix(in srgb, var(--bg) var(--glass-scrim), transparent), color-mix(in srgb, var(--bg) var(--glass-scrim), transparent)),
|
||||
linear-gradient(
|
||||
color-mix(in srgb, var(--bg) var(--glass-scrim), transparent),
|
||||
color-mix(in srgb, var(--bg) var(--glass-scrim), transparent)
|
||||
),
|
||||
color-mix(in srgb, var(--surface) var(--glass-menu-alpha), transparent);
|
||||
backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturate));
|
||||
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturate));
|
||||
border: 1px solid color-mix(in srgb, var(--border) 80%, transparent);
|
||||
border-top-color: color-mix(in srgb, #fff var(--glass-edge), color-mix(in srgb, var(--border) 80%, transparent));
|
||||
border-top-color: color-mix(
|
||||
in srgb,
|
||||
#fff var(--glass-edge),
|
||||
color-mix(in srgb, var(--border) 80%, transparent)
|
||||
);
|
||||
box-shadow:
|
||||
inset 0 1px 0 color-mix(in srgb, #fff calc(var(--glass-inset) - 2%), transparent),
|
||||
0 18px 44px -16px rgba(0, 0, 0, 0.6);
|
||||
@@ -180,9 +297,21 @@ body {
|
||||
(The full "videos behind glass everywhere" effect is Phase 2 / end-of-project polish.) */
|
||||
html[data-theme="dark"] body {
|
||||
background:
|
||||
radial-gradient(1100px 620px at 10% -10%, color-mix(in srgb, var(--accent) calc(34% * var(--ambient)), transparent), transparent 60%),
|
||||
radial-gradient(1000px 720px at 115% 10%, color-mix(in srgb, var(--accent) calc(24% * var(--ambient)), transparent), transparent 55%),
|
||||
radial-gradient(900px 640px at 50% 118%, color-mix(in srgb, var(--accent) calc(18% * var(--ambient)), transparent), transparent 60%),
|
||||
radial-gradient(
|
||||
1100px 620px at 10% -10%,
|
||||
color-mix(in srgb, var(--accent) calc(34% * var(--ambient)), transparent),
|
||||
transparent 60%
|
||||
),
|
||||
radial-gradient(
|
||||
1000px 720px at 115% 10%,
|
||||
color-mix(in srgb, var(--accent) calc(24% * var(--ambient)), transparent),
|
||||
transparent 55%
|
||||
),
|
||||
radial-gradient(
|
||||
900px 640px at 50% 118%,
|
||||
color-mix(in srgb, var(--accent) calc(18% * var(--ambient)), transparent),
|
||||
transparent 60%
|
||||
),
|
||||
var(--bg);
|
||||
background-attachment: fixed;
|
||||
}
|
||||
@@ -190,8 +319,10 @@ html[data-theme="dark"] body {
|
||||
the frosted sheen shows even over dark UI (over colourful content it just looks richer). */
|
||||
html[data-theme="dark"] .glass,
|
||||
html[data-theme="dark"] .glass-menu {
|
||||
backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturate)) brightness(var(--glass-dark-bright));
|
||||
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturate)) brightness(var(--glass-dark-bright));
|
||||
backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturate))
|
||||
brightness(var(--glass-dark-bright));
|
||||
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturate))
|
||||
brightness(var(--glass-dark-bright));
|
||||
}
|
||||
/* Toasts surface bottom-left (by the nav's notification bell), off the conventional
|
||||
top-right; a brighter rim draws the eye there. Most needed in dark mode, where the
|
||||
@@ -228,39 +359,81 @@ html[data-perf="1"] body {
|
||||
|
||||
/* ===== Motion ===== */
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@keyframes overlayIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@keyframes overlayOut {
|
||||
from { opacity: 1; }
|
||||
to { opacity: 0; }
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes panelIn {
|
||||
from { transform: translateX(100%); }
|
||||
to { transform: translateX(0); }
|
||||
from {
|
||||
transform: translateX(100%);
|
||||
}
|
||||
to {
|
||||
transform: translateX(0);
|
||||
}
|
||||
}
|
||||
@keyframes panelOut {
|
||||
from { transform: translateX(0); }
|
||||
to { transform: translateX(100%); }
|
||||
from {
|
||||
transform: translateX(0);
|
||||
}
|
||||
to {
|
||||
transform: translateX(100%);
|
||||
}
|
||||
}
|
||||
@keyframes popIn {
|
||||
from { opacity: 0; transform: translateY(-6px) scale(0.97); }
|
||||
to { opacity: 1; transform: none; }
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(-6px) scale(0.97);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: none;
|
||||
}
|
||||
}
|
||||
/* One-shot attention flash for a chat dock window on a new message. Inset glow so the
|
||||
window's own overflow-hidden doesn't clip it; pulses twice then fades. */
|
||||
@keyframes chatFlash {
|
||||
0% { box-shadow: inset 0 0 0 0 transparent; }
|
||||
18% { box-shadow: inset 0 0 0 3px var(--accent), inset 0 0 22px 0 color-mix(in srgb, var(--accent) 55%, transparent); }
|
||||
40% { box-shadow: inset 0 0 0 1px transparent; }
|
||||
62% { box-shadow: inset 0 0 0 3px var(--accent), inset 0 0 22px 0 color-mix(in srgb, var(--accent) 55%, transparent); }
|
||||
100% { box-shadow: inset 0 0 0 0 transparent; }
|
||||
0% {
|
||||
box-shadow: inset 0 0 0 0 transparent;
|
||||
}
|
||||
18% {
|
||||
box-shadow:
|
||||
inset 0 0 0 3px var(--accent),
|
||||
inset 0 0 22px 0 color-mix(in srgb, var(--accent) 55%, transparent);
|
||||
}
|
||||
40% {
|
||||
box-shadow: inset 0 0 0 1px transparent;
|
||||
}
|
||||
62% {
|
||||
box-shadow:
|
||||
inset 0 0 0 3px var(--accent),
|
||||
inset 0 0 22px 0 color-mix(in srgb, var(--accent) 55%, transparent);
|
||||
}
|
||||
100% {
|
||||
box-shadow: inset 0 0 0 0 transparent;
|
||||
}
|
||||
}
|
||||
.chat-flash {
|
||||
animation: chatFlash 1.1s ease-out;
|
||||
}
|
||||
.chat-flash { animation: chatFlash 1.1s ease-out; }
|
||||
|
||||
/* ===== Color schemes (accent + neutrals), each with dark + light ===== */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user