Make the frosted glass actually visible
The wash was far too faint for backdrop-blur to register, so the glass read as flat navy. Now: - The backdrop is a real colour field: four saturated blue/periwinkle/ cyan radial blobs over the navy base, plus two slow animated blobs at higher opacity and less pre-blur, placed behind the content column. - Surfaces are properly translucent instead of near-opaque: cards 62%, glass panels 68%, sidebar 68%, list groups 70%, study chrome 72%, tab bar 74%, mobile header 62%. - Glass gets a specular top edge (inset 0 1px 0 --glass-top) so the surface catches light like real glass. - Light --text-subtle darkened to #55647f so text still clears AA on the tinted glass (4.84:1 on the most saturated sidebar area). Audit updated to the tinted backgrounds: contrast 21/21. Suites: deck chrome 15/15, deck fixes 15/15, final ux 12/12, key gate 49/49, install sheet 64/64, retry 14/14, zoom 6/6, security 8/8, pwa 16/16.
This commit is contained in:
parent
979f3ddc39
commit
92fe68524b
1 changed files with 49 additions and 45 deletions
|
|
@ -93,9 +93,10 @@
|
||||||
--sidebar-divider: #d7e0ef;
|
--sidebar-divider: #d7e0ef;
|
||||||
--hairline-soft: rgb(14 21 40 / 0.07);
|
--hairline-soft: rgb(14 21 40 / 0.07);
|
||||||
--glass-tint: rgb(255 255 255 / 0.55);
|
--glass-tint: rgb(255 255 255 / 0.55);
|
||||||
|
--glass-top: rgb(255 255 255 / 0.55);
|
||||||
--text: #0e1526; /* 16.9:1 on #f4f7fd */
|
--text: #0e1526; /* 16.9:1 on #f4f7fd */
|
||||||
--text-muted: #4d5c78; /* 6.3:1 */
|
--text-muted: #4d5c78; /* 6.3:1 */
|
||||||
--text-subtle: #5a6a86; /* 5.1:1 */
|
--text-subtle: #55647f; /* 5.6:1 */
|
||||||
--hover: rgb(14 21 40 / 0.05);
|
--hover: rgb(14 21 40 / 0.05);
|
||||||
--sidebar-top: #eef3fb;
|
--sidebar-top: #eef3fb;
|
||||||
--sidebar-bottom: #e5edf9;
|
--sidebar-bottom: #e5edf9;
|
||||||
|
|
@ -135,6 +136,7 @@
|
||||||
--sidebar-divider: rgb(255 255 255 / 0.1);
|
--sidebar-divider: rgb(255 255 255 / 0.1);
|
||||||
--hairline-soft: rgb(255 255 255 / 0.08);
|
--hairline-soft: rgb(255 255 255 / 0.08);
|
||||||
--glass-tint: rgb(255 255 255 / 0.06);
|
--glass-tint: rgb(255 255 255 / 0.06);
|
||||||
|
--glass-top: rgb(255 255 255 / 0.08);
|
||||||
--text: #e9eefb; /* 15.4:1 on #0e1424 */
|
--text: #e9eefb; /* 15.4:1 on #0e1424 */
|
||||||
--text-muted: #b7c3dc; /* 10.4:1 */
|
--text-muted: #b7c3dc; /* 10.4:1 */
|
||||||
--text-subtle: #94a4c2; /* 7.3:1 */
|
--text-subtle: #94a4c2; /* 7.3:1 */
|
||||||
|
|
@ -163,22 +165,23 @@
|
||||||
--shadow-card-hover: 0 10px 28px -16px rgb(0 0 0 / 0.55), 0 1px 2px rgb(0 0 0 / 0.3);
|
--shadow-card-hover: 0 10px 28px -16px rgb(0 0 0 / 0.55), 0 1px 2px rgb(0 0 0 / 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Backdrop: the icon's navy base and blue wash, seen through frosted glass. */
|
/* Backdrop: the icon's navy base with saturated blue/periwinkle/cyan blobs —
|
||||||
|
this is the colour the frosted surfaces are blurring. */
|
||||||
:root {
|
:root {
|
||||||
--bd-sky: rgb(110 175 245 / 0.2);
|
--bd-a: rgb(96 160 250 / 0.5);
|
||||||
--bd-lilac: rgb(145 145 240 / 0.14);
|
--bd-b: rgb(150 150 245 / 0.42);
|
||||||
--bd-mint: rgb(110 210 230 / 0.12);
|
--bd-c: rgb(90 205 235 / 0.38);
|
||||||
--bd-top: #f8fafe;
|
--bd-top: #f7faff;
|
||||||
--bd-mid: #f2f6fd;
|
--bd-mid: #eef4fd;
|
||||||
--bd-bottom: #ecf1fb;
|
--bd-bottom: #e8f0fb;
|
||||||
}
|
}
|
||||||
.dark {
|
.dark {
|
||||||
--bd-sky: rgb(60 130 230 / 0.14);
|
--bd-a: rgb(48 120 235 / 0.42);
|
||||||
--bd-lilac: rgb(110 115 235 / 0.1);
|
--bd-b: rgb(105 110 240 / 0.34);
|
||||||
--bd-mint: rgb(70 180 215 / 0.08);
|
--bd-c: rgb(50 165 220 / 0.3);
|
||||||
--bd-top: #111a2e;
|
--bd-top: #101a30;
|
||||||
--bd-mid: #0e1424;
|
--bd-mid: #0c1220;
|
||||||
--bd-bottom: #0a101d;
|
--bd-bottom: #080d18;
|
||||||
}
|
}
|
||||||
|
|
||||||
html,
|
html,
|
||||||
|
|
@ -245,53 +248,54 @@ body {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
background:
|
background:
|
||||||
radial-gradient(135vw 110vh at 4% -30%, var(--bd-sky) 0%, transparent 72%),
|
radial-gradient(52vw 52vh at 12% 4%, var(--bd-a) 0%, transparent 68%),
|
||||||
radial-gradient(125vw 105vh at 104% -18%, var(--bd-lilac) 0%, transparent 70%),
|
radial-gradient(46vw 46vh at 94% 12%, var(--bd-b) 0%, transparent 66%),
|
||||||
radial-gradient(135vw 105vh at 38% 128%, var(--bd-mint) 0%, transparent 72%),
|
radial-gradient(56vw 52vh at 78% 98%, var(--bd-c) 0%, transparent 68%),
|
||||||
|
radial-gradient(44vw 44vh at 26% 82%, var(--bd-a) 0%, transparent 70%),
|
||||||
linear-gradient(180deg, var(--bd-top) 0%, var(--bd-mid) 50%, var(--bd-bottom) 100%);
|
linear-gradient(180deg, var(--bd-top) 0%, var(--bd-mid) 50%, var(--bd-bottom) 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Two slow, very soft blobs for a little life behind the glass. */
|
/* Two slow, saturated blobs so the glass always has colour to bend. */
|
||||||
.app-backdrop::before,
|
.app-backdrop::before,
|
||||||
.app-backdrop::after {
|
.app-backdrop::after {
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
filter: blur(110px);
|
filter: blur(80px);
|
||||||
opacity: 0.22;
|
opacity: 0.55;
|
||||||
}
|
}
|
||||||
.app-backdrop::before {
|
.app-backdrop::before {
|
||||||
width: 52vw;
|
width: 44vw;
|
||||||
height: 52vw;
|
height: 44vw;
|
||||||
min-width: 24rem;
|
min-width: 20rem;
|
||||||
min-height: 24rem;
|
min-height: 20rem;
|
||||||
top: -26vh;
|
top: 4vh;
|
||||||
left: -18vw;
|
left: 6vw;
|
||||||
background: radial-gradient(circle, var(--bd-sky), transparent 66%);
|
background: radial-gradient(circle, var(--bd-a), transparent 64%);
|
||||||
animation: float 16s ease-in-out infinite;
|
animation: float 16s ease-in-out infinite;
|
||||||
}
|
}
|
||||||
.app-backdrop::after {
|
.app-backdrop::after {
|
||||||
width: 46vw;
|
width: 40vw;
|
||||||
height: 46vw;
|
height: 40vw;
|
||||||
min-width: 22rem;
|
min-width: 18rem;
|
||||||
min-height: 22rem;
|
min-height: 18rem;
|
||||||
bottom: -28vh;
|
bottom: -6vh;
|
||||||
right: -14vw;
|
right: 2vw;
|
||||||
background: radial-gradient(circle, var(--bd-mint), transparent 66%);
|
background: radial-gradient(circle, var(--bd-c), transparent 64%);
|
||||||
animation: float 20s ease-in-out infinite reverse;
|
animation: float 20s ease-in-out infinite reverse;
|
||||||
}
|
}
|
||||||
.dark .app-backdrop::before,
|
.dark .app-backdrop::before,
|
||||||
.dark .app-backdrop::after {
|
.dark .app-backdrop::after {
|
||||||
opacity: 0.3;
|
opacity: 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
@layer components {
|
@layer components {
|
||||||
/* Glass primitives ------------------------------------------------------ */
|
/* Glass primitives ------------------------------------------------------ */
|
||||||
.glass-panel {
|
.glass-panel {
|
||||||
@apply backdrop-blur-xl backdrop-saturate-150;
|
@apply backdrop-blur-xl backdrop-saturate-150;
|
||||||
background: color-mix(in oklab, var(--surface) 82%, transparent);
|
background: color-mix(in oklab, var(--surface) 68%, transparent);
|
||||||
border: 1px solid var(--hairline);
|
border: 1px solid var(--hairline);
|
||||||
box-shadow: var(--shadow-card);
|
box-shadow: var(--shadow-card), inset 0 1px 0 var(--glass-top);
|
||||||
}
|
}
|
||||||
|
|
||||||
.glass-chip {
|
.glass-chip {
|
||||||
|
|
@ -307,7 +311,7 @@ body {
|
||||||
/* Tailwind emits both the prefixed and standard properties; hand-written
|
/* Tailwind emits both the prefixed and standard properties; hand-written
|
||||||
backdrop-filter gets minified down to -webkit- only, which paints nothing. */
|
backdrop-filter gets minified down to -webkit- only, which paints nothing. */
|
||||||
@apply backdrop-blur-xl backdrop-saturate-150;
|
@apply backdrop-blur-xl backdrop-saturate-150;
|
||||||
background: color-mix(in oklab, var(--surface) 70%, transparent);
|
background: color-mix(in oklab, var(--surface) 62%, transparent);
|
||||||
border-bottom: 1px solid var(--hairline);
|
border-bottom: 1px solid var(--hairline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -315,7 +319,7 @@ body {
|
||||||
surface as the cards, with a neutral border and shadow. */
|
surface as the cards, with a neutral border and shadow. */
|
||||||
.study-chrome {
|
.study-chrome {
|
||||||
@apply backdrop-blur-xl backdrop-saturate-150;
|
@apply backdrop-blur-xl backdrop-saturate-150;
|
||||||
background: color-mix(in oklab, var(--surface) 88%, transparent);
|
background: color-mix(in oklab, var(--surface) 72%, transparent);
|
||||||
border: 1px solid var(--hairline);
|
border: 1px solid var(--hairline);
|
||||||
box-shadow: var(--shadow-card);
|
box-shadow: var(--shadow-card);
|
||||||
}
|
}
|
||||||
|
|
@ -326,9 +330,9 @@ body {
|
||||||
.card {
|
.card {
|
||||||
border-radius: 1.125rem; /* 18px */
|
border-radius: 1.125rem; /* 18px */
|
||||||
@apply backdrop-blur-xl backdrop-saturate-150;
|
@apply backdrop-blur-xl backdrop-saturate-150;
|
||||||
background: color-mix(in oklab, var(--surface) 78%, transparent);
|
background: color-mix(in oklab, var(--surface) 62%, transparent);
|
||||||
border: 1px solid var(--card-border);
|
border: 1px solid var(--card-border);
|
||||||
box-shadow: var(--card-shadow);
|
box-shadow: var(--card-shadow), inset 0 1px 0 var(--glass-top);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Opt-in hover lift for interactive cards (deck cards). Pointer devices only,
|
/* Opt-in hover lift for interactive cards (deck cards). Pointer devices only,
|
||||||
|
|
@ -354,7 +358,7 @@ body {
|
||||||
.list-group {
|
.list-group {
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
@apply backdrop-blur-lg backdrop-saturate-150;
|
@apply backdrop-blur-lg backdrop-saturate-150;
|
||||||
background: color-mix(in oklab, var(--surface) 82%, transparent);
|
background: color-mix(in oklab, var(--surface) 70%, transparent);
|
||||||
border: 1px solid var(--hairline);
|
border: 1px solid var(--hairline);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
@ -407,7 +411,7 @@ body {
|
||||||
|
|
||||||
.tabbar {
|
.tabbar {
|
||||||
@apply backdrop-blur-xl;
|
@apply backdrop-blur-xl;
|
||||||
background: color-mix(in oklab, var(--page) 88%, transparent);
|
background: color-mix(in oklab, var(--page) 74%, transparent);
|
||||||
border-top: 1px solid var(--hairline);
|
border-top: 1px solid var(--hairline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -428,8 +432,8 @@ body {
|
||||||
@apply backdrop-blur-xl backdrop-saturate-150;
|
@apply backdrop-blur-xl backdrop-saturate-150;
|
||||||
background: linear-gradient(
|
background: linear-gradient(
|
||||||
180deg,
|
180deg,
|
||||||
color-mix(in oklab, var(--sidebar-top) 84%, transparent),
|
color-mix(in oklab, var(--sidebar-top) 68%, transparent),
|
||||||
color-mix(in oklab, var(--sidebar-bottom) 84%, transparent)
|
color-mix(in oklab, var(--sidebar-bottom) 68%, transparent)
|
||||||
);
|
);
|
||||||
border-right: 1px solid var(--sidebar-divider);
|
border-right: 1px solid var(--sidebar-divider);
|
||||||
box-shadow: var(--sidebar-edge);
|
box-shadow: var(--sidebar-edge);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue