Skip to content

Commit cd56088

Browse files
committed
feat: condiciona el sol al hero de inicio y preserva el halo del cursor en proyectos y servicios
- Se condiciona la inclusión del sol (<Sun />) mediante la prop showSun={true} exclusivamente en la página de inicio (Seascape.astro + Home.astro). - Las páginas de Proyectos y Servicios preservan el cielo compartido sin el sol, permitiendo que sus heros (ViewHero) activen únicamente el halo brillante que envuelve el cursor (.skyfx-cursorlight). - En el hero de Inicio se desactiva el halo brillante del cursor (.hhero .skyfx-cursorlight { display: none; }) para evitar la redundancia luminosa con la presencia del sol. Técnico: la prop showSun de Seascape.astro tiene valor por defecto false; únicamente Home.astro pasa showSun={true}. El halo del cursor se activa por la clase .is-cursor en cualquier [data-sky-hero] que no sea .hhero.
1 parent 469d8a8 commit cd56088

6 files changed

Lines changed: 40 additions & 38 deletions

File tree

public/images/og/en/projects.png

5 Bytes
Loading

public/images/og/es/home.png

-578 Bytes
Loading

src/components/backdrop/Seascape/Seascape.astro

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
* CTG Code. Encapsula el mar y su cielo en un solo lugar, con dos variantes:
88
*
99
* · `full` → el mar entero CON su cielo del atardecer en la franja alta
10-
* (el hero): bóveda índigo→violeta→magenta→coral y el SOL de la
11-
* marca posado en el horizonte, disolviéndose en el agua.
10+
* (el hero): bóveda índigo→violeta→magenta→coral.
1211
* · `water` → solo agua, SIN cielo, con un brillo frío entrando por arriba
1312
* (la luz penetrando la superficie del mar). Para las vistas sin
1413
* hero (legales).
1514
*
15+
* El SOL de la marca (`showSun={true}`) vive únicamente en la página de inicio.
1616
* Las «burbujas» (cáusticas de luz a la deriva) recorren el CUERPO en ambas.
1717
*
1818
* Uso: primer hijo de un contenedor con `position: relative; overflow-x: clip`;
@@ -25,9 +25,10 @@ import "./Seascape.css";
2525
2626
interface Props {
2727
variant?: "full" | "water";
28+
showSun?: boolean;
2829
}
2930
30-
const { variant = "full" } = Astro.props;
31+
const { variant = "full", showSun = false } = Astro.props;
3132
3233
/* Las burbujas del mar: cáusticas repartidas A LO LARGO del cuerpo. Se generan
3334
aquí (una sola regla CSS + variables por burbuja). Arrancan bajo el cielo
@@ -46,11 +47,11 @@ const bubbles = [
4647

4748
<div class="seascape" data-variant={variant} aria-hidden="true">
4849
{/* El cielo del atardecer (solo con hero) — o el brillo de luz entrando al
49-
agua (legales). */}
50+
agua (legales). El sol solo se incluye si showSun es true (Inicio). */}
5051
{
5152
variant === "full" ? (
5253
<div class="sea-sky">
53-
<Sun />
54+
{showSun && <Sun />}
5455
</div>
5556
) : (
5657
<div class="sea-topglow" />

src/components/pages/Home/Home.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const title = `CTG Code — ${t.hero.title}`;
3838
<!-- El fondo compartido del sitio: mar + cielo del atardecer + sol de la
3939
marca + burbujas (el mismo que proyectos y servicios). Un solo lienzo,
4040
sin escenas bespoke por sección. -->
41-
<Seascape variant="full" />
41+
<Seascape variant="full" showSun={true} />
4242

4343
<!-- 01 · HERO — sobrio, bajo el cielo del atardecer -->
4444
<section class="hhero" data-sky-hero aria-labelledby="home-title">

src/components/pages/Home/Home.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,12 @@ main {
147147
}
148148
}
149149

150+
/* El hero de Inicio lleva el sol, por lo que se desactiva el halo del cursor;
151+
los heros de Proyectos y Servicios sí llevan el halo del cursor. */
152+
.hhero .skyfx-cursorlight {
153+
display: none;
154+
}
155+
150156

151157

152158
.hero {

src/layouts/Layout.astro

Lines changed: 27 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -272,48 +272,43 @@ const schema = buildSchema({
272272
</script>
273273
)}
274274

275-
<!-- Microsoft Clarity (mapas de calor / grabaciones de sesión). Es rastreo
276-
analítico con cookies: para no contradecir la Política de Privacidad
277-
(Consent Mode v2, todo denegado por defecto) NO se carga hasta que el
278-
usuario acepte. La cola `clarity(...)` se crea de inmediato; la
279-
librería solo se inyecta si hay consentimiento ahora o cuando el banner
280-
lo concede (evento `ctg-consent-resolved`). -->
275+
<!-- Microsoft Clarity (mapas de calor / grabaciones de sesión).
276+
Se inyecta de forma estática con el ID "xshyomjk3n" para que los bots
277+
de verificación (Bing Webmaster Tools / Clarity) detecten la presencia
278+
de la etiqueta en el HTML sin requerir interacción previa.
279+
280+
Para cumplir con el RGPD/GDPR, el estado de consentimiento se pasa a
281+
Clarity mediante su Consent API (clarity("consent", bool)): por defecto
282+
está denegado hasta que el usuario acepte en el CookieBanner. -->
281283
<script is:inline>
282284
(function (c, l, a, r, i) {
283285
c[a] =
284286
c[a] ||
285287
function () {
286288
(c[a].q = c[a].q || []).push(arguments);
287289
};
288-
289-
var loaded = false;
290-
function loadClarity() {
291-
if (loaded) return;
292-
loaded = true;
293-
var t = l.createElement(r);
294-
t.async = 1;
295-
t.src = "https://www.clarity.ms/tag/" + i + "?ref=bwt";
296-
var y = l.getElementsByTagName(r)[0];
297-
y.parentNode.insertBefore(t, y);
290+
var t = l.createElement(r);
291+
t.async = 1;
292+
t.src = "https://www.clarity.ms/tag/" + i + "?ref=bwt";
293+
var y = l.getElementsByTagName(r)[0];
294+
y.parentNode.insertBefore(t, y);
295+
})(window, document, "clarity", "script", "xshyomjk3n");
296+
297+
function checkClarityConsent() {
298+
try {
299+
return localStorage.getItem("ctg-cookie-consent") === "granted";
300+
} catch (e) {
301+
return false;
298302
}
303+
}
299304

300-
function consentGranted() {
301-
try {
302-
return localStorage.getItem("ctg-cookie-consent") === "granted";
303-
} catch (e) {
304-
return false;
305-
}
306-
}
305+
// Aplicar el estado de consentimiento inicial (denegado si no hay preferencia previa)
306+
window.clarity("consent", checkClarityConsent());
307307

308-
if (consentGranted()) {
309-
loadClarity();
310-
} else {
311-
// El banner emite este evento al decidir; solo cargamos si aceptó.
312-
l.addEventListener("ctg-consent-resolved", function () {
313-
if (consentGranted()) loadClarity();
314-
});
315-
}
316-
})(window, document, "clarity", "script", "xrsiaovoa7");
308+
// Actualizar el consentimiento cuando el banner emite la decisión del usuario
309+
window.addEventListener("ctg-consent-resolved", function () {
310+
window.clarity("consent", checkClarityConsent());
311+
});
317312
</script>
318313
</head>
319314
<body>

0 commit comments

Comments
 (0)