Skip to content

Commit ce7ed3c

Browse files
btraversclaude
andcommitted
Light mode: drop washed-out hero glow + fix scoped scheme overrides
Building on the surface-definition work, fix the real "livid" cause and a related Vue scoped-CSS bug. - The pink hero glow (glowpulse animation, opacity .55->.8) is a dark-scheme signature; on near-white it became a washed-out pink cloud behind the wordmark. It is now hidden in light mode. - Root cause of several light-mode misses: a scoped selector of the form :global(html-state) .btv-child compiles (Vue scoped CSS) to just the html-state element, dropping the child — so the light overrides for the glow and the nav/pill/footer overlays never reached the landing subtree. Drive all scheme-specific values (overlays, card rest shadow, glow display) through CSS variables set on the two html states and consume them on the elements, which cascades correctly. Verified light: glow hidden, cards have a rest shadow and still lift on hover, pills use the dark-on-light overlay; dark: glow shown, no card rest shadow. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent d1b8756 commit ce7ed3c

1 file changed

Lines changed: 19 additions & 18 deletions

File tree

apps/website/.vitepress/theme/Landing.vue

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -232,32 +232,33 @@ onMounted(() => {
232232

233233
<style scoped>
234234
.btv {
235-
--btv-hover: rgba(255, 255, 255, 0.05);
236-
--btv-pill: rgba(255, 255, 255, 0.04);
237-
--btv-footer: rgba(0, 0, 0, 0.2);
238235
min-height: 100vh;
239236
background: radial-gradient(1100px 560px at 50% -120px, var(--bg-grad), var(--bg) 62%);
240237
color: var(--text);
241238
font-family: var(--sans);
242239
}
243240
244-
/* Light mode (system / toggle): surfaces, text and accent-as-text come from the
245-
shared tokens (tokens.css :root:not(.dark)); only these landing-local
246-
overlays — header/nav washes, pills, footer tint — flip here. */
241+
/* Landing-local scheme overlays (header/nav washes, pills, footer tint, and the
242+
light card rest shadow). NB: in Vue scoped CSS a `:global(html…) .btv` selector
243+
compiles to the `html…` element, so we set BOTH schemes on the two html states
244+
rather than a default on `.btv` — a `.btv` default would shadow the html-level
245+
value for everything inside the landing. Surfaces/text/accent themselves come
246+
from the shared tokens (tokens.css). */
247+
:global(html.dark) .btv {
248+
--btv-hover: rgba(255, 255, 255, 0.05);
249+
--btv-pill: rgba(255, 255, 255, 0.04);
250+
--btv-footer: rgba(0, 0, 0, 0.2);
251+
--card-rest-shadow: none; /* dark cards: depth from the fill + hairline */
252+
--glow-display: block; /* pink hero glow — a dark-scheme signature */
253+
}
247254
:global(html:not(.dark)) .btv {
248255
--btv-hover: rgba(26, 12, 20, 0.05);
249256
--btv-pill: rgba(26, 12, 20, 0.035);
250257
--btv-footer: rgba(26, 12, 20, 0.025);
258+
--card-rest-shadow: 0 1px 2px rgba(26, 12, 20, 0.05), 0 16px 32px -24px rgba(26, 12, 20, 0.22);
259+
--glow-display: none; /* on near-white the pink glow reads as a washed
260+
"livid" cloud behind the wordmark — drop it */
251261
}
252-
:global(html:not(.dark)) .btv-glow { opacity: 0.55; }
253-
/* On near-white, the hairline alone leaves cards looking flat — give them a
254-
soft rest shadow in light mode so they lift off the background. */
255-
:global(html:not(.dark)) .btv-pcard,
256-
:global(html:not(.dark)) .btv-prin-card {
257-
box-shadow: 0 1px 2px rgba(26, 12, 20, 0.05), 0 16px 32px -24px rgba(26, 12, 20, 0.22);
258-
}
259-
/* keep the hover lift shadow — the rest rule above outspecifies .pcard:hover */
260-
:global(html:not(.dark)) .btv-pcard:hover { box-shadow: var(--shadow-card); }
261262
262263
/* general accent highlights (incl. the small copy toast) keep the AA text accent */
263264
.btv-pink { color: var(--text-accent); }
@@ -291,7 +292,7 @@ onMounted(() => {
291292
292293
/* Hero */
293294
.btv-hero { position: relative; text-align: center; padding: 104px 28px 86px; overflow: hidden; }
294-
.btv-glow { position: absolute; top: 30px; left: 50%; transform: translateX(-50%); width: 560px; max-width: 90vw; height: 380px; background: radial-gradient(closest-side, rgba(224,88,154,0.30), transparent 72%); filter: blur(8px); animation: glowpulse 6s ease-in-out infinite; pointer-events: none; z-index: 0; }
295+
.btv-glow { display: var(--glow-display, block); position: absolute; top: 30px; left: 50%; transform: translateX(-50%); width: 560px; max-width: 90vw; height: 380px; background: radial-gradient(closest-side, rgba(224,88,154,0.30), transparent 72%); filter: blur(8px); animation: glowpulse 6s ease-in-out infinite; pointer-events: none; z-index: 0; }
295296
.btv-hero-inner { position: relative; z-index: 1; max-width: 900px; margin: 0 auto; }
296297
.btv-float { display: inline-flex; animation: floaty 6s ease-in-out infinite; filter: drop-shadow(0 18px 40px rgba(142,26,82,0.45)); }
297298
.btv-title { margin: 26px 0 0; font-weight: 800; letter-spacing: -2.5px; line-height: 0.95; font-size: clamp(52px, 9vw, 92px); }
@@ -314,15 +315,15 @@ onMounted(() => {
314315
315316
/* Principles */
316317
.btv-prin { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; margin-top: 34px; }
317-
.btv-prin-card { background: var(--card); border: 1px solid var(--border); border-radius: 16px; padding: 22px; transition: transform .2s ease, border-color .2s ease; }
318+
.btv-prin-card { background: var(--card); border: 1px solid var(--border); border-radius: 16px; padding: 22px; box-shadow: var(--card-rest-shadow); transition: transform .2s ease, border-color .2s ease; }
318319
.btv-prin-card:hover { transform: translateY(-3px); border-color: var(--border-2); }
319320
.btv-prin-num { width: 38px; height: 38px; border-radius: 10px; display: flex; align-items: center; justify-content: center; background: var(--accent-wash); border: 1px solid var(--accent-line); color: var(--text-accent); font-family: var(--mono); font-weight: 600; font-size: 15px; }
320321
.btv-prin-title { margin: 16px 0 0; font-weight: 700; font-size: 18px; letter-spacing: -0.3px; color: var(--text); }
321322
.btv-prin-body { margin: 9px 0 0; font-size: 14.5px; line-height: 1.6; color: var(--muted); }
322323
323324
/* Project cards */
324325
.btv-projects { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
325-
.btv-pcard { display: flex; flex-direction: column; background: var(--card); border: 1px solid var(--border); border-radius: 20px; padding: 26px; }
326+
.btv-pcard { display: flex; flex-direction: column; background: var(--card); border: 1px solid var(--border); border-radius: 20px; padding: 26px; box-shadow: var(--card-rest-shadow); }
326327
.pcard { transition: transform .2s ease, border-color .2s ease, box-shadow .2s ease; }
327328
.pcard:hover { transform: translateY(-4px); border-color: var(--border-2); box-shadow: var(--shadow-card); }
328329
.btv-pcard-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }

0 commit comments

Comments
 (0)