/* Base de efeitos compartilhada (D-11). Cada proposta define suas próprias cores. */

/* ---------- Reveal ---------- */
[data-reveal] { opacity: 0; transition: opacity .9s cubic-bezier(.2,.7,.2,1) var(--d, 0ms), transform .9s cubic-bezier(.2,.7,.2,1) var(--d, 0ms), filter .9s ease var(--d, 0ms); will-change: transform, opacity; }
[data-reveal="sobe"], [data-reveal=""] { transform: translateY(28px); }
[data-reveal="desfoque"] { filter: blur(12px); transform: translateY(12px); }
[data-reveal="escala"] { transform: scale(.94); }
[data-reveal="esquerda"] { transform: translateX(-36px); }
[data-reveal="direita"] { transform: translateX(36px); }
[data-reveal].is-in { opacity: 1; transform: none; filter: none; }

/* ---------- Split / Blur text ---------- */
.split__palavra { display: inline-block; white-space: nowrap; }
.split--sobe .split__palavra { overflow: hidden; vertical-align: top; padding-bottom: .08em; }
.split__unidade { display: inline-block; transition: transform .9s cubic-bezier(.2,.75,.15,1), opacity .9s ease, filter .9s ease; transition-delay: calc(var(--d, 0ms) + var(--i) * 28ms); }
.split--sobe .split__unidade { transform: translateY(105%); opacity: 0; }
.split--blur .split__unidade { filter: blur(10px); opacity: 0; transform: translateY(.25em); transition-delay: calc(var(--d, 0ms) + var(--i) * 70ms); }
.split.is-in .split__unidade { transform: none; opacity: 1; filter: none; }

/* ---------- ScrollReveal ---------- */
.scrub__p { opacity: .16; transition: opacity .45s ease, color .45s ease; }
.scrub__p.on { opacity: 1; }

/* ---------- Ramos ---------- */
.ramo-host { pointer-events: none; }
.ramo-host .ramo { width: 100%; height: 100%; overflow: visible; display: block; }
.ramo__traco { stroke-dasharray: 1; stroke-dashoffset: 0; }
.ramo__folha { fill: currentColor; fill-opacity: var(--folha-opacidade, .55); }
.ramo__no { fill: currentColor; }
.ramo__estrela { stroke: var(--ramo-estrela, currentColor); stroke-width: 1.4; stroke-linecap: round; fill: none; }
[data-draw] .ramo__traco { stroke-dashoffset: 1; transition: stroke-dashoffset 1.6s cubic-bezier(.45,.05,.25,1); transition-delay: calc(var(--d, 0ms) + var(--o) * 1.4s); }
[data-draw] .ramo__folha, [data-draw] .ramo__no, [data-draw] .ramo__estrela { opacity: 0; transform: scale(.4); transform-box: fill-box; transform-origin: center; transition: opacity .8s ease, transform .9s cubic-bezier(.2,.8,.2,1.2); transition-delay: calc(var(--d, 0ms) + .5s + var(--o, 1) * 1.5s); }
[data-draw].is-in .ramo__traco { stroke-dashoffset: 0; }
[data-draw].is-in .ramo__folha, [data-draw].is-in .ramo__no, [data-draw].is-in .ramo__estrela { opacity: 1; transform: none; }
.balanca { animation: balanca var(--balanca-tempo, 9s) ease-in-out infinite alternate; transform-origin: var(--balanca-origem, 50% 100%); }
@keyframes balanca { from { transform: rotate(-1.6deg); } to { transform: rotate(1.6deg); } }

/* ---------- Spotlight ---------- */
.fx-spotlight { position: relative; isolation: isolate; }
.fx-spotlight::before { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; z-index: -1; opacity: 0; transition: opacity .4s ease;
  background: radial-gradient(420px circle at var(--mx, 50%) var(--my, 50%), var(--spot, rgba(143,211,195,.16)), transparent 60%); }
.fx-spotlight:hover::before { opacity: 1; }

/* ---------- Tilt ---------- */
.fx-tilt { transform: perspective(900px) rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg)); transition: transform .5s cubic-bezier(.2,.7,.2,1); transform-style: preserve-3d; }
.fx-tilt:hover { transition-duration: .12s; }

/* ---------- Magnet ---------- */
.fx-magnet { transform: translate(var(--tx, 0px), var(--ty, 0px)); transition: transform .35s cubic-bezier(.2,.7,.2,1); }

/* ---------- RotatingText ---------- */
.rotate { position: relative; display: inline-grid; vertical-align: bottom; overflow: hidden; }
.rotate__item { grid-area: 1 / 1; transform: translateY(100%); opacity: 0; transition: transform .7s cubic-bezier(.2,.8,.2,1), opacity .7s ease; white-space: nowrap; }
.rotate__item.is-on { transform: none; opacity: 1; }
.rotate__item.is-out { transform: translateY(-100%); opacity: 0; }

/* ---------- Marquee (ScrollVelocity) ---------- */
.fx-marquee { overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }
.fx-marquee__trilho { display: flex; width: max-content; gap: var(--marquee-gap, 1rem); animation: marquee var(--marquee-tempo, 40s) linear infinite; }
.fx-marquee:hover .fx-marquee__trilho { animation-play-state: paused; }
@keyframes marquee { to { transform: translateX(-50%); } }

/* ---------- Shiny text ---------- */
.fx-shiny { background: linear-gradient(110deg, var(--shiny-base, currentColor) 35%, var(--shiny-luz, var(--branco)) 50%, var(--shiny-base, currentColor) 65%); background-size: 250% 100%; -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; animation: brilho 5s linear infinite; }
@keyframes brilho { from { background-position: 120% 0; } to { background-position: -120% 0; } }

/* ---------- Pendências (regra de site/README.md) ---------- */
.pendente { display: inline-flex; align-items: center; gap: .5em; font-size: .78rem; line-height: 1.2; padding: .3em .7em .3em .35em; border-radius: 999px; border: 1px dashed var(--pendente-borda, currentColor); color: var(--pendente-cor, inherit); white-space: nowrap; }
.pendente__id { font-weight: 600; font-size: .72rem; letter-spacing: .04em; padding: .2em .5em; border-radius: 999px; background: var(--pendente-fundo, rgba(188,84,28,.14)); color: var(--pendente-id, var(--terracota)); }

/* ---------- Barra de progresso ---------- */
.fx-progresso { position: fixed; inset: 0 0 auto 0; height: 2px; transform-origin: 0 50%; transform: scaleX(var(--scroll-prog, 0)); z-index: 100; }

/* ---------- Acessibilidade ---------- */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
.pular { position: absolute; left: 1rem; top: -100px; z-index: 200; padding: .6rem 1rem; border-radius: 8px; background: var(--branco); color: var(--petroleo); }
.pular:focus { top: 1rem; }

.reduz-movimento *, .reduz-movimento *::before, .reduz-movimento *::after { animation: none !important; transition-duration: .01ms !important; transition-delay: 0ms !important; }
.reduz-movimento [data-reveal], .reduz-movimento .split__unidade { opacity: 1 !important; transform: none !important; filter: none !important; }
.reduz-movimento .scrub__p { opacity: 1; }
