10 Commits
Author SHA1 Message Date
George Cushen d7a8fbb415 fix(parse_block_v3): force stacking context on section element
The previous section_break implementation used CSS mask-image, which
incidentally established a stacking context on the section. Replacing
it with a gradient overlay div removed that side-effect — and broke
the visual depth on every section with a gradient mesh or radial
background.

Without a stacking context, the section's negative-z-index descendants
(home-section-bg at z:-1 carrying the radial gradient, and the
gradient_mesh wrapper at z:-10 carrying the orbs) escaped the section
and painted behind the page root, where they were occluded by the
page body — flat dark hero, no glow, no orbs.

Add `isolate` (isolation: isolate) to the section element. This is
the no-visual-side-effect way to force a stacking context, restoring
containment of the negative-z layers without affecting siblings or
content.
2026-05-02 19:08:32 +01:00
George Cushen f584ad1610 fix(parse_block_v3): replace section_break mask-image with gradient overlay
The mask-image approach for section_break was wrong: making pixels
transparent reveals the body background, not the next sibling section
(which sits below in document flow, not behind in z-order). When the
body bg didn't match the adjacent section, this produced a visible
white/light strip between sections — exactly what the fade was
supposed to prevent.

Replace mask-image with absolutely-positioned gradient overlay divs at
the section's top/bottom edges. The overlay fades from transparent to
a user-specified colour matching the adjacent sibling's background.
Explicit colour declaration is required because Hugo can't reliably
auto-detect the next sibling's bg at parse time.

API change (no backward-compat — feature was added this session, no
sites depend on the legacy string form):

  # before
  section_break: fade-bottom

  # after
  section_break:
    fade_bottom: "#101828"   # CSS colour matching next section's bg
    fade_top:    "#0a0e27"   # optional, independent
    size:        "6rem"      # optional, default 6rem

Update the landing page hero (fade-bottom into dark logos band) and
cta-card (fade-top from white FAQ section above) to the new form.
2026-05-02 18:25:18 +01:00
George Cushen a2bc56bd14 feat(blox): 2026 visual polish and new layout options across blocks
- features: add bento layout (asymmetric first-card-featured grid with
  grid-flow-dense), subtitle field, per-item image support
- stats: add numbers_gradient option (bg-clip-text gradient numbers)
- pricing: gradient border wrapper on highlighted tier replacing ring,
  gradient CTA button on primary style; extracted TierCardContent
- testimonials: single item → featured card with decorative quote mark
  and gradient avatar fallback; multiple → responsive card grid
- cta-image-paragraph: rounded-2xl image wrapper with shadow, pill CTA
  button, circle-icon feature list
- cta-card: fix auto text-color detection on colored gradient cards;
  use full literal class strings (Tailwind scanner safety)
- parse_block_v3: radial gradient support, section_break mask-image
  fade, bg-color migration to section element when gradient_mesh active
  to fix stacking context (orbs at z:-10 no longer occluded)
2026-05-02 17:03:52 +01:00
George Cushen dc14b48b42 feat(faq): migrate FAQ block from Go HTML to Preact
Replaces block.html with a Preact component featuring smooth CSS grid
0fr→1fr height animation, icon rotation, and multi-paragraph answer
support via renderRich(). Single-open accordion with question/title and
answer/text field aliases for backward compatibility.
2026-05-02 17:03:36 +01:00
George Cushen 76023f9461 refactor(images): adopt Hugo reflect.IsImageResource* API for type-safe image processing
Replace manual format detection (printf "%T", MediaType.SubType whitelists,
duck-typing) with Hugo's new reflect.IsResource, reflect.IsImageResource, and
reflect.IsImageResourceProcessable functions across 19 template files.

Key changes:
- process_responsive_image: collapse 15-line format whitelist into single
  reflect.IsImageResourceProcessable call
- Unify three-way SVG/processable/GIF branches into two-way $canProcess guard
- Remove duplicate GIF passthrough branches in single.html, events/page.html
- Add missing SVG guard in research-areas block (was calling .Fill unprotected)
- Replace nil checks with reflect.IsResource in get_cover_image/get_featured_image

Design decision: GIFs are intentionally excluded from processing despite Hugo
supporting it — processing strips animation frames, so we preserve user-optimized
animated GIFs by checking (IsImageResourceProcessable AND not GIF).
2026-03-27 04:35:53 +00:00
George Cushen 13dde12ae0 refactor(hugo): use strings.ReplacePairs for chained replacements
Adopt Hugo v0.158's strings.ReplacePairs in rss.xml and
parse_block_v3.html to replace nested replace calls.
2026-03-27 03:33:15 +00:00
George Cushen ef8ed449c7 feat(hugo): replace deprecated APIs for Hugo v0.156+ compatibility
Migrate site.Data → hugo.Data (42 occurrences), site.IsMultiLingual →
hugo.IsMultilingual, and site.AllPages → hugo.Sites nested range.
Simplify Netlify redirects template to use pre-processed aliases
instead of relLangURL per gohugoio/hugo#14408.
2026-03-27 03:25:42 +00:00
George Cushen dbe0c86df7 fix(blocks): restore missing background design features in v3 parser
- Fix background image brightness filter not applying (closes issue URL below)
- Add CSS filters: blur, contrast, saturate, grayscale
- Add background image size, position, and repeat controls
- Add background.css_class for custom classes on bg layer
- Add design.clip_path for shaped section edges
- Add errorf for missing background images
- Remove dead v2 parser (no longer referenced)

Fixes https://discord.com/channels/722225264733716590/1477717661981999114/1477717661981999114
2026-03-03 00:30:27 +00:00
George Cushen ef8a34e33a feat: convert remaining Landing Page blocks from Go HTML to React 2026-02-18 19:21:54 +00:00
George Cushen f4280ddb1c refactor: rename modules and update migration docs
BREAKING CHANGE
Module paths moved to `github.com/HugoBlox/kit` with new names:
- core `blox-tailwind` → `blox`
- analytics → `analytics`
- netlify → `integrations/netlify`
- slides (reveal) → `slides`
Update go.mod, module.yaml/params, scripts, tests, and v0.11 migration guide accordingly.
2026-01-02 20:59:48 +00:00