diff --git a/site/assets/css/style.css b/site/assets/css/style.css index 677bd9a..0591437 100644 --- a/site/assets/css/style.css +++ b/site/assets/css/style.css @@ -628,20 +628,30 @@ section[id] { z-index: 2; } -/* Gradient blur: the hero photo is blurred hardest behind the text (the middle) - and sharpens smoothly outward — a backdrop blur masked by a radial gradient. - The layer sits behind the text (z-index -1 in the container's stacking - context) and above the photo and its overlays. */ -.hero-section .container::before { +/* Frosted band: the hero photo is blurred at full strength along a horizontal + line through the text and fades to sharp (0) outward, up and down — a backdrop + blur masked by a vertical gradient. ::before is the blur, ::after the frost: + a faint white veil plus fine grain, same mask. Both sit behind the text + (z-index -1 in the container's stacking context) and above the photo. */ +.hero-section .container::before, +.hero-section .container::after { content: ''; - position: absolute; /* the container is static, so this fills the hero */ + position: absolute; /* the container is static, so these fill the hero */ inset: 0; z-index: -1; pointer-events: none; - -webkit-backdrop-filter: blur(18px); - backdrop-filter: blur(18px); - -webkit-mask-image: radial-gradient(ellipse 52% 46% at 50% 52%, #000 0%, rgba(0, 0, 0, .6) 40%, transparent 100%); - mask-image: radial-gradient(ellipse 52% 46% at 50% 52%, #000 0%, rgba(0, 0, 0, .6) 40%, transparent 100%); + -webkit-mask-image: linear-gradient(to bottom, transparent 18%, rgba(0, 0, 0, .55) 36%, #000 50%, rgba(0, 0, 0, .55) 64%, transparent 82%); + mask-image: linear-gradient(to bottom, transparent 18%, rgba(0, 0, 0, .55) 36%, #000 50%, rgba(0, 0, 0, .55) 64%, transparent 82%); +} +.hero-section .container::before { + -webkit-backdrop-filter: blur(22px) saturate(1.1); + backdrop-filter: blur(22px) saturate(1.1); +} +.hero-section .container::after { + background: + url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='f' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' numOctaves='3' seed='12' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeComponentTransfer%3E%3CfeFuncR type='linear' slope='1.6' intercept='-.2'/%3E%3CfeFuncG type='linear' slope='1.6' intercept='-.2'/%3E%3CfeFuncB type='linear' slope='1.6' intercept='-.2'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23f)' opacity='.34'/%3E%3C/svg%3E") 0 0 / 180px 180px, + linear-gradient(rgba(255, 255, 255, .07), rgba(255, 255, 255, .07)); + background-blend-mode: overlay, normal; } .hero-text {