/* === v3 fonts, self-hosted (DESIGN-SYSTEM-V3 §2) =========================
 * Space Grotesk (display) / Inter (corpo) / JetBrains Mono (etiquetas).
 * Subsets latin + latin-ext, woff2 variable — descarregados uma vez para
 * assets/fonts/, zero pedidos ao Google Fonts em runtime. Os ficheiros de
 * peso repetido foram deduplicados (Inter 400/500/600 e Space Grotesk
 * 500/700 são o mesmo ficheiro variável). ~199KB no total.
 * ===================================================================== */
@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('assets/fonts/inter-400-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('assets/fonts/inter-400-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url('assets/fonts/inter-400-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url('assets/fonts/inter-400-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url('assets/fonts/inter-400-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url('assets/fonts/inter-400-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url('assets/fonts/jetbrains-mono-500-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url('assets/fonts/jetbrains-mono-500-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:500;font-display:swap;src:url('assets/fonts/space-grotesk-500-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:500;font-display:swap;src:url('assets/fonts/space-grotesk-500-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:700;font-display:swap;src:url('assets/fonts/space-grotesk-500-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:700;font-display:swap;src:url('assets/fonts/space-grotesk-500-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}

/* website2 v3 — Cena 1 "Acendemos o sinal".  Tokens: DESIGN-SYSTEM-V3.md §1.
   Carregado DEPOIS de finish.css: o v3 ganha sempre à cascata v2. */
:root{
  --void:#07080D; --ink:#0F121B; --ink-2:#171B27;
  --paper:#EEF1F7; --paper-dim:rgba(238,241,247,.62); --paper-faint:rgba(238,241,247,.34);
  --volt:#C8FF2E; --flux:#4B5CFF; --pulse:#FF2FA8; --aqua:#19E5CE;
  --rule:rgba(238,241,247,.10); --rule-strong:rgba(238,241,247,.22);
  /* v3 troca a serif editorial da v2 por grotesca — tech, não revista.
     Fontes próprias (Space Grotesk / Inter / JetBrains Mono) entram
     self-hosted em assets/fonts/ na passagem seguinte. */
  --ff-display:"Space Grotesk","Archivo",Inter,system-ui,-apple-system,sans-serif;
  --ff-ui:Inter,system-ui,-apple-system,"Segoe UI",sans-serif;
  --ff-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
}
/* o header da v2 é creme e parte o escuro — escurece enquanto o sinal manda */
.site-header.is-over-hero{background:rgba(7,8,13,.55)!important;backdrop-filter:blur(14px);border-bottom:1px solid var(--rule)}
.site-header.is-over-hero .brand,.site-header.is-over-hero .site-nav a,
.site-header.is-over-hero .lang-switch a{color:var(--paper)}
.site-header.is-over-hero .lang-switch a:not([aria-current]){color:var(--paper-faint)}
.site-header.is-over-hero .mark{background:var(--volt);color:var(--void)}
/* 260vh davam quatro ecras seguidos praticamente identicos no percurso real
   (passos 00 a 03 da folha v4): o campo de sinal e conduzido pelo scroll, mas
   a evolucao visual em 2.6 alturas de ecra nao se le. A pista passa a ter a
   duracao que o conteudo justifica. */
.signal{position:relative;height:165vh;background:var(--void);color:var(--paper)}
.signal-stage{position:sticky;top:0;height:100svh;overflow:hidden;display:grid;place-items:center}
.signal-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0}
/* grão — a textura anti-IA, sem raster (DESIGN-SYSTEM-V3 §4) */
.signal-stage::after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;opacity:.05;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E")}
.signal-inner{position:relative;z-index:1;width:100%;max-width:1320px;padding-inline:clamp(20px,4vw,72px);box-sizing:border-box;text-align:center}
/* 2026-10-12: o sobrolho passou a levar nome e três funções e parte em duas
   linhas no telemóvel; com altura de linha 1 as linhas ficavam coladas. */
.signal-eyebrow{display:block;font:500 11px/1.7 var(--ff-mono,ui-monospace,monospace);letter-spacing:.16em;text-transform:uppercase;color:var(--volt);margin-bottom:clamp(18px,3vh,34px)}
.signal-title{margin:0;font-family:var(--ff-display);font-weight:700;
  font-size:clamp(34px,6.6vw,110px);line-height:.96;letter-spacing:-.032em;color:var(--paper);text-wrap:balance}
.signal-word{display:inline-block;opacity:0;will-change:transform,opacity}
.signal-title em{font-style:normal;color:var(--volt)}
.signal-sub{opacity:0;margin:clamp(20px,3vh,34px) auto 0;max-width:62ch;font-size:clamp(15px,1.35vw,19px);line-height:1.55;color:var(--paper-dim)}
.signal-actions{opacity:0;display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-top:clamp(24px,4vh,42px)}
.signal-btn{display:inline-flex;align-items:center;gap:9px;padding:15px 24px;border-radius:999px;text-decoration:none;
  font:600 13px/1 var(--ff-ui,Inter,system-ui,sans-serif);letter-spacing:.01em;transition:transform .18s ease,background-color .18s ease,color .18s ease}
.signal-btn--solid{background:var(--volt);color:var(--void)}
.signal-btn--solid:hover{transform:translateY(-2px);background:#d7ff5c}
.signal-btn--ghost{border:1px solid var(--rule-strong);color:var(--paper)}
.signal-btn--ghost:hover{transform:translateY(-2px);background:var(--ink-2)}
.signal-btn:focus-visible{outline:3px solid var(--volt);outline-offset:4px}
/* legenda dos quatro feixes — os nomes das estações da Cena 3 */
.signal-legend{opacity:0;display:flex;flex-wrap:wrap;gap:8px 22px;justify-content:center;margin:clamp(26px,4vh,46px) 0 0;padding:0;list-style:none;
  font:500 10px/1 var(--ff-mono,ui-monospace,monospace);letter-spacing:.15em;text-transform:uppercase;color:var(--paper-faint)}
.signal-legend li{display:flex;align-items:center;gap:8px}
.signal-legend i{width:16px;height:2px;border-radius:2px;background:currentColor;font-style:normal}
.signal-legend li:nth-child(1){color:var(--volt)}.signal-legend li:nth-child(2){color:var(--flux)}
.signal-legend li:nth-child(3){color:var(--pulse)}.signal-legend li:nth-child(4){color:var(--aqua)}
/* medidor de carga — a barra É a linha que acende */
.signal-meter{position:absolute;left:0;right:0;bottom:0;z-index:3;display:flex;align-items:center;gap:14px;padding:0 clamp(20px,4vw,72px) clamp(18px,3vh,30px);
  font:500 10px/1 var(--ff-mono,ui-monospace,monospace);letter-spacing:.16em;color:var(--paper-faint);transition:opacity .5s ease}
.signal-meter-track{flex:1;height:1px;background:var(--rule);overflow:hidden}
.signal-meter-fill{display:block;height:100%;background:var(--volt);transform:scaleX(0);transform-origin:left center}
.signal.is-lit .signal-meter{opacity:0;pointer-events:none}
/* O conteúdo só aparece quando o sinal acende — mas nunca pode ficar preso.
 * Duas garantias, a mesma disciplina do curtainAutoClear no site-mãe:
 *   1. a regra só existe com JS ligado (html.js), por isso sem JS o hero
 *      está simplesmente visível;
 *   2. mesmo com JS, se o hero-signal.js falhar a carregar e o .is-lit nunca
 *      chegar, este keyframe revela o bloco aos 2.4s. */
html.js .signal:not(.is-lit) .signal-inner{visibility:hidden;animation:signalAutoReveal 0s linear 2.4s forwards}
@keyframes signalAutoReveal{to{visibility:visible}}
html.js .signal:not(.is-lit) .signal-word,
html.js .signal:not(.is-lit) .signal-sub,
html.js .signal:not(.is-lit) .signal-actions,
html.js .signal:not(.is-lit) .signal-legend{animation:signalAutoFade .6s ease 2.4s forwards}
@keyframes signalAutoFade{to{opacity:1}}
@media(max-width:820px){
  .signal{height:220vh}
  .signal-inner{text-align:left}
  .signal-legend,.signal-actions{justify-content:flex-start}
  .signal-actions .signal-btn{flex:1 1 auto;justify-content:center}
}
@media(prefers-reduced-motion:reduce){
  .signal{height:auto}
  .signal-stage{position:relative;height:auto;min-height:88svh;padding-block:clamp(110px,16vh,180px)}
  .signal-word,.signal-sub,.signal-actions,.signal-legend{opacity:1!important;transform:none!important}
  .signal:not(.is-lit) .signal-inner{visibility:visible}
}
