:root{--cyan:#35c8ff;--violet:#8b5cff;--acid:#74ff9b;--hot:#ff4ecb}
body:before{content:"";position:fixed;inset:0;z-index:60;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.018) 0 1px,transparent 1px 4px);mix-blend-mode:soft-light}
#neural-canvas{position:fixed;inset:0;width:100%;height:100%;z-index:-2;opacity:.62;pointer-events:none}.cursor-aura{position:fixed;width:420px;height:420px;left:0;top:0;z-index:-1;border-radius:50%;pointer-events:none;background:radial-gradient(circle,rgba(27,170,255,.13),rgba(98,59,255,.05) 35%,transparent 70%);transform:translate(-50%,-50%);transition:opacity .3s}.scroll-progress{position:fixed;left:0;top:0;height:2px;width:0;z-index:100;background:linear-gradient(90deg,var(--cyan),var(--violet),var(--hot));box-shadow:0 0 16px var(--cyan)}
.data-rain{position:fixed;inset:0;z-index:-1;pointer-events:none;overflow:hidden;mask-image:linear-gradient(to bottom,transparent,#000 15%,#000 75%,transparent)}.data-rain span{position:absolute;top:-20vh;color:rgba(53,200,255,.16);font:10px/1.7 ui-monospace,monospace;writing-mode:vertical-rl;text-orientation:upright;letter-spacing:7px;text-shadow:0 0 10px #168dff;animation:dataFall linear infinite}
.site-header{height:62px;border-bottom-color:rgba(53,200,255,.35);box-shadow:0 12px 45px rgba(0,0,0,.35)}.site-header:after{content:"LIVE / ANDREW.OS";position:absolute;right:28px;bottom:-19px;color:rgba(102,220,255,.7);font:9px ui-monospace,monospace;letter-spacing:.24em}.brand b{animation:brandPulse 3s ease-in-out infinite}
.hero{height:610px;perspective:1200px;border-bottom:0;overflow:visible}.hero:after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 66% 45%,rgba(26,151,255,.13),transparent 23%),linear-gradient(90deg,transparent 49.9%,rgba(53,200,255,.22) 50%,transparent 50.1%);pointer-events:none}.hero-copy{top:105px;left:5%;width:43%;animation:heroEnter .9s cubic-bezier(.2,.8,.2,1) both}.hero h1{font-size:clamp(52px,4.15vw,72px);letter-spacing:-.025em;background:linear-gradient(110deg,#fff 15%,#8ddcff 48%,#fff 62%,#75a8ff);background-size:220% 100%;-webkit-background-clip:text;color:transparent;animation:titleFlow 5s linear infinite;filter:drop-shadow(0 0 26px rgba(40,166,255,.22))}.hero h1:after{content:"_";color:var(--cyan);animation:blink .75s steps(1) infinite}.intro{font-size:17px}.tags span{position:relative;overflow:hidden}.tags span:before{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent,rgba(68,207,255,.22),transparent);transform:translateX(-120%);animation:sweep 4s infinite}
.hero-photo{left:49%;width:36%;height:100%;clip-path:polygon(12% 0,100% 0,88% 100%,0 100%);filter:drop-shadow(0 0 45px rgba(0,137,255,.22));animation:photoReveal 1.1s ease both}.hero-photo:before{content:"";position:absolute;inset:4% 6%;z-index:2;border:1px solid rgba(53,200,255,.45);clip-path:polygon(0 0,20% 0,20% 1px,0 1px,0 20%,1px 20%,1px 0,100% 0,100% 20%,calc(100% - 1px) 20%,calc(100% - 1px) 1px,80% 1px,80% 0);animation:borderPulse 2.5s infinite}.hero-photo img{filter:saturate(.92) contrast(1.08) brightness(.82)}
.barrel-rings{position:absolute;z-index:3;left:48%;top:46%;width:390px;aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none;filter:drop-shadow(0 0 9px rgba(46,192,255,.8));mix-blend-mode:screen}.barrel-rings:before{content:"";position:absolute;inset:12%;border-radius:50%;background:repeating-radial-gradient(circle,transparent 0 20px,rgba(67,206,255,.18) 21px 22px,transparent 23px 39px);animation:barrelPulse 3.4s ease-in-out infinite}.barrel-rings i{position:absolute;border-radius:50%;border:2px solid transparent;background:conic-gradient(from 0deg,transparent 0 9%,rgba(76,215,255,.9) 12%,transparent 18% 35%,rgba(40,111,255,.65) 41%,transparent 47% 70%,rgba(143,79,255,.65) 75%,transparent 82%) border-box;mask:linear-gradient(#000 0 0) padding-box,linear-gradient(#000 0 0);mask-composite:exclude;animation:barrelSpin 7s linear infinite}.barrel-rings i:nth-child(1){inset:2%;animation-duration:12s}.barrel-rings i:nth-child(2){inset:16%;animation-direction:reverse;animation-duration:8s}.barrel-rings i:nth-child(3){inset:30%;animation-duration:5.5s}.barrel-rings i:nth-child(4){inset:42%;animation-direction:reverse;animation-duration:3.8s;border-width:3px;filter:blur(.25px)}
.panel{backdrop-filter:blur(14px);border-color:rgba(53,200,255,.4);box-shadow:0 18px 45px rgba(0,0,0,.45),inset 0 0 30px rgba(20,148,255,.05)}.terminal{left:43%;top:235px;width:210px;animation:floatA 6s ease-in-out infinite}.stack{left:40%;bottom:45px;width:170px;animation:floatB 7s ease-in-out infinite}.code{right:1.2%;top:82px;width:275px;animation:floatB 5.5s ease-in-out infinite}.activity{right:2%;bottom:80px;width:235px;animation:floatA 6.5s ease-in-out infinite}.activity .bars i{transform-origin:bottom;animation:barLive 1.2s ease-in-out infinite alternate}.activity .bars i:nth-child(2n){animation-delay:-.5s}.activity .bars i:nth-child(3n){animation-delay:-.9s}
.signal-rail{height:34px;margin:0 0 12px;overflow:hidden;border-block:1px solid rgba(53,200,255,.24);background:rgba(2,15,28,.82);color:#78cfff;font:10px ui-monospace,monospace;letter-spacing:.2em}.signal-rail div{width:max-content;height:100%;display:flex;align-items:center;gap:28px;animation:rail 22s linear infinite}.signal-rail div:after{content:"SYSTEM ONLINE  ◆  JAVA 25  ◆  QUARKUS CORE  ◆  CONAN API  ◆  MAPACORE  ◆  BRZ ASA API  ◆  BUILDING THE IMPOSSIBLE";word-spacing:20px}.signal-rail i{width:5px;height:5px;border-radius:50%;background:var(--acid);box-shadow:0 0 10px var(--acid)}
.strip{border-color:rgba(53,200,255,.3);box-shadow:inset 0 0 65px rgba(10,111,190,.035),0 20px 60px rgba(0,0,0,.25)}.projects{height:auto;min-height:245px;padding:18px 22px}.projects h2{height:36px}.project-grid{grid-template-columns:repeat(3,1fr)}.project{height:92px;isolation:isolate;transform-style:preserve-3d}.project:after{content:"";position:absolute;inset:-50%;z-index:-1;background:conic-gradient(from 180deg,transparent,var(--tone),transparent 22%);opacity:0;animation:orbit 4s linear infinite;transition:opacity .25s}.project:hover:after{opacity:.18}.project:hover{transform:translateY(-5px) scale(1.015);box-shadow:0 0 35px color-mix(in srgb,var(--tone) 25%,transparent)}.asa{--tone:#a56cff}.ambush{--tone:#ff3d71}
.github{height:auto;min-height:315px;padding:18px 22px}.github-heading{height:40px}.repo-grid{width:100%;grid-template-columns:repeat(4,1fr)}.repo,.repo-skeleton{height:76px;position:relative;overflow:hidden}.repo:before{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent,rgba(53,200,255,.08),transparent);transform:translateX(-120%)}.repo:hover:before{animation:sweep .7s}.contribution{position:relative;right:auto;bottom:auto;width:100%;height:68px;margin-top:12px}.squares{width:72%;height:38px;background-size:auto;animation:contribPulse 2.3s ease-in-out infinite}.beyond{height:220px;margin-top:12px}.gallery figure{height:204px}.gallery figure{transition:transform .4s,filter .4s}.gallery figure:hover{transform:translateY(-8px) rotateX(3deg);filter:drop-shadow(0 12px 22px rgba(32,166,255,.22))}
.reveal{opacity:0;transform:translateY(48px) scale(.985);transition:opacity .8s ease,transform .8s cubic-bezier(.2,.8,.2,1)}.reveal.visible{opacity:1;transform:none}.contact{height:150px}.contact:after{content:"";position:absolute;width:170px;height:170px;border:1px solid rgba(53,200,255,.28);transform:rotate(45deg);animation:contactSpin 12s linear infinite}
@keyframes dataFall{to{transform:translateY(130vh)}}@keyframes brandPulse{50%{filter:drop-shadow(0 0 18px #159eff)}}@keyframes heroEnter{from{opacity:0;transform:translateX(-45px)}}@keyframes photoReveal{from{opacity:0;transform:translateX(80px);filter:blur(12px)}}@keyframes titleFlow{to{background-position:-220% 0}}@keyframes blink{50%{opacity:0}}@keyframes sweep{to{transform:translateX(120%)}}@keyframes borderPulse{50%{opacity:.35;transform:scale(.985)}}@keyframes floatA{50%{transform:translateY(-13px) rotateX(1deg)}}@keyframes floatB{50%{transform:translateY(11px) rotateY(-2deg)}}@keyframes barLive{to{transform:scaleY(.35);filter:hue-rotate(50deg)}}@keyframes rail{to{transform:translateX(-50%)}}@keyframes orbit{to{transform:rotate(360deg)}}@keyframes contribPulse{50%{filter:brightness(1.8) drop-shadow(0 0 9px #31c85b)}}@keyframes contactSpin{to{transform:rotate(405deg)}}
@keyframes barrelSpin{to{transform:rotate(360deg)}}@keyframes barrelPulse{50%{transform:scale(1.08);opacity:.45;filter:blur(1px)}}
@media(max-width:1320px){.hero{height:570px}.code{right:0;width:230px}.activity{right:0}.project-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:980px){.hero{height:auto;min-height:980px}.hero-copy{padding-top:75px}.hero-photo{clip-path:none}.project-grid,.repo-grid{grid-template-columns:1fr 1fr}.projects,.github{min-height:0}.beyond{height:auto}.cursor-aura{display:none}}
@media(max-width:620px){.hero{min-height:1190px}.hero h1{font-size:48px}.project-grid,.repo-grid{grid-template-columns:1fr}.signal-rail{margin-top:10px}.site-header:after{display:none}.github{padding-inline:14px}.data-rain{opacity:.45}}
@media(prefers-reduced-motion:reduce){#neural-canvas,.data-rain,.cursor-aura,.hero-fio{display:none}.reveal{opacity:1;transform:none}}

/* O FIO DA MARCA nas linhas do hero — o mesmo efeito do tema Cheffzy
   (pdv-cheffzy-vivo.css, .pdv-topo::after mais a faísca do ::before): o fio parado ganha
   o gradiente da marca, e uma faísca clara o percorre de ponta a ponta a cada 7s.
   A PALETA É A DAQUI — --cyan → --violet → --hot, a mesma do .scroll-progress. O âmbar e
   o magenta de lá são a assinatura do Cheffzy e não têm o que fazer num portfólio pessoal;
   o que se copiou foi o efeito, não a marca de outro produto.
   Portador próprio: .hero:before desenha as três linhas e .hero:after já é o brilho do
   rosto — não havia pseudo-elemento livre. As posições (10%, 40%, 65%) e a máscara de
   fade são as MESMAS das linhas, senão a faísca correria ao lado do fio. */
.hero-fio{position:absolute;inset:20px 0;pointer-events:none;filter:blur(.4px);mask-image:linear-gradient(90deg,#000,transparent 60%);background:linear-gradient(180deg,transparent,#dff6ff,var(--cyan),transparent) 10% 0/2px 90px no-repeat,linear-gradient(180deg,transparent,#f3ecff,var(--violet),transparent) 40% 0/2px 90px no-repeat,linear-gradient(90deg,transparent,#ffe9f7,var(--hot),transparent) 0 65%/90px 2px no-repeat;animation:heroFaisca 7s ease-in-out infinite}
@keyframes heroFaisca{0%{background-position:10% -120px,40% -120px,-120px 65%;opacity:0}6%{opacity:1}60%{opacity:1}72%,100%{background-position:10% calc(100% + 120px),40% calc(100% + 120px),calc(100% + 120px) 65%;opacity:0}}

/* Campo ASCII procedural (campo-ascii.js) — camada de fundo, na mesma altura do
   #neural-canvas e depois dele no DOM: desenha por cima da rede neural e continua
   atrás de TODO o conteúdo. Nada foi removido. Sem WebGL2 o próprio motor cai para
   canvas2d; sem nenhum contexto ele apaga o canvas e some sem deixar rastro.
   Em prefers-reduced-motion o campo NÃO é escondido: o motor congela o desenho e
   para o laço — quadro parado é o que a preferência pede, tela vazia não é. */
.campo-ascii{position:fixed;inset:0;z-index:-2;pointer-events:none;overflow:hidden;opacity:.72}

.squares{display:grid;grid-template-columns:repeat(28,1fr);gap:3px;background:none!important}.squares b{display:block;aspect-ratio:1;background:#35d76c;border-radius:2px;box-shadow:0 0 5px rgba(53,215,108,.35);animation:squareBlink 2.5s ease-in-out infinite alternate}@keyframes squareBlink{to{opacity:.15!important;filter:brightness(1.8)}}
#organism-links{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none;overflow:visible}.link-paths path{fill:none;stroke:url(#none);stroke:#27b9ff;stroke-width:1;stroke-dasharray:3 12;opacity:.2;animation:nerveFlow 5s linear infinite}.link-pulses circle{fill:#8ae7ff;filter:drop-shadow(0 0 7px #23b8ff)}
.project .icon{width:52px;height:52px;left:20px;border-radius:15px;overflow:hidden;background:#050c13;border:1px solid color-mix(in srgb,var(--tone) 65%,transparent);box-shadow:0 0 18px color-mix(in srgb,var(--tone) 25%,transparent)}.project .icon img{width:100%;height:100%;object-fit:cover}.project:before{display:none}
.expertise{position:relative;margin-top:12px;padding:28px;border:1px solid rgba(59,196,255,.3);border-radius:16px;background:radial-gradient(circle at 82% 18%,rgba(69,58,181,.16),transparent 28%),linear-gradient(145deg,rgba(3,16,29,.96),rgba(2,9,18,.88));overflow:hidden;box-shadow:inset 0 0 80px rgba(24,120,210,.04),0 25px 70px rgba(0,0,0,.3)}.expertise:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 49.95%,rgba(65,190,255,.08) 50%,transparent 50.05%),linear-gradient(0deg,transparent 49.95%,rgba(65,190,255,.06) 50%,transparent 50.05%);background-size:72px 72px;mask-image:radial-gradient(circle at 75% 30%,#000,transparent 68%);animation:gridBreath 6s ease-in-out infinite}
.expertise-head{position:relative;z-index:2;display:grid;grid-template-columns:1fr 240px;align-items:center;margin-bottom:24px}.eyebrow{color:var(--cyan);font:10px ui-monospace,monospace;letter-spacing:.35em}.expertise h2{margin:7px 0 5px;font-size:32px}.expertise-head p{max-width:760px;margin:0;color:#9eb3c5;font-size:14px;line-height:1.55}
.core-orbit{position:relative;width:170px;height:90px;justify-self:end;display:grid;place-items:center}.core-orbit b{z-index:2;color:#dff7ff;font:10px ui-monospace,monospace;letter-spacing:.16em}.core-orbit:before,.core-orbit:after,.core-orbit i{content:"";position:absolute;border:1px solid rgba(53,200,255,.35);border-radius:50%;animation:orbitCore 9s linear infinite}.core-orbit:before{width:160px;height:70px}.core-orbit:after{width:120px;height:48px;animation-direction:reverse;animation-duration:6s}.core-orbit i:nth-child(2){width:7px;height:7px;border:0;background:var(--acid);box-shadow:0 0 12px var(--acid);transform:translateX(80px)}.core-orbit i:nth-child(3){width:5px;height:5px;border:0;background:var(--hot);box-shadow:0 0 10px var(--hot);transform:translateX(-60px)}.core-orbit i:nth-child(4){width:3px;height:3px;border:0;background:var(--cyan);transform:translateY(25px)}
.expertise-grid{position:relative;z-index:2;display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.skill-organ{position:relative;min-height:142px;padding:15px;border:1px solid rgba(65,158,221,.26);border-radius:11px;background:rgba(2,12,23,.78);overflow:hidden;transition:transform .35s,border-color .35s,box-shadow .35s}.skill-organ:hover{transform:translateY(-5px);border-color:rgba(53,200,255,.65);box-shadow:0 0 34px rgba(26,155,255,.14)}.skill-organ header{display:flex;align-items:center;gap:10px}.skill-organ header b{color:#4bcaff;font:11px ui-monospace,monospace}.skill-organ header span{font-size:14px;font-weight:700}.skill-organ header i{margin-left:auto;color:var(--acid);font:8px ui-monospace,monospace;letter-spacing:.12em;animation:statusBlink 2s steps(1) infinite}.skill-organ p{margin:12px 0 0;color:#a8bbc9;font-size:12px;line-height:1.55}.skill-wave{height:30px;margin-top:12px;background:linear-gradient(90deg,transparent,#35c8ff,transparent);clip-path:polygon(0 55%,8% 52%,12% 28%,16% 75%,20% 46%,28% 52%,32% 8%,36% 87%,40% 48%,48% 54%,52% 25%,56% 72%,61% 48%,68% 53%,72% 14%,76% 82%,80% 49%,90% 54%,100% 48%);opacity:.65;animation:waveLife 2.4s ease-in-out infinite}
.skill-organ:after{content:attr(data-signal);position:absolute;right:9px;bottom:6px;color:rgba(73,183,255,.16);font:9px ui-monospace,monospace;text-transform:uppercase;letter-spacing:.25em}
@keyframes nerveFlow{to{stroke-dashoffset:-120}}@keyframes gridBreath{50%{opacity:.45;transform:scale(1.03)}}@keyframes orbitCore{to{transform:rotate(360deg)}}@keyframes statusBlink{50%{opacity:.35}}@keyframes waveLife{50%{transform:scaleY(.38) translateX(6px);filter:hue-rotate(60deg)}}
@media(max-width:980px){.expertise-grid{grid-template-columns:1fr 1fr}.expertise-head{grid-template-columns:1fr}.core-orbit{display:none}}@media(max-width:620px){.expertise{padding:20px 14px}.expertise-grid{grid-template-columns:1fr}.project .icon{left:16px}.project{padding-left:82px}}
