/* Shared by the public theme, Elementor widgets and the live studio preview. */
@property --pf-orbit-angle { syntax: '<angle>'; initial-value: 0deg; inherits: false; }
.pf-fx-scope {
  --fx-a:#8b5cf6; --fx-b:#38bdf8; --fx-duration:30s; --fx-intensity:.45; --fx-scale:1;
  --fx-opacity:88%; --fx-blur:18px; --fx-photo-height:340px; --fx-photo-position:50%; --fx-photo-zoom:1;
  --fx-surface:var(--panel,#191e28); --fx-ink:var(--text,#f1f3f8); --fx-line:var(--line,#ffffff18);
  isolation:isolate;
}
.pf-fx-background { position:fixed; inset:0; z-index:-1; overflow:hidden; pointer-events:none; opacity:var(--fx-intensity); contain:strict; }
.pf-fx-background>* { position:absolute; inset:-12%; display:none; transform:scale(var(--fx-scale)); }
.pf-fx-scope:not([data-fx-background="classic"])>.pf-background { display:none; }
.pf-fx-scope:is([data-fx-background="none"],[data-fx-background="classic"])>.pf-fx-background { display:none; }
.pf-fx-wash { background:radial-gradient(ellipse at 20% 30%,var(--fx-a),transparent 55%),radial-gradient(ellipse at 85% 70%,var(--fx-b),transparent 55%); }
[data-fx-background="aurora"]>.pf-fx-background .pf-fx-wash { display:block; filter:blur(40px); opacity:.85; animation:pf-aurora var(--fx-duration) ease-in-out infinite alternate; }
[data-fx-background="aurora"]>.pf-fx-background .pf-fx-shape { display:block; inset:10% -30%; border-radius:50%; background:linear-gradient(105deg,transparent 25%,var(--fx-b) 49%,transparent 65%); filter:blur(55px); animation:pf-ribbon calc(var(--fx-duration)*1.2) ease-in-out infinite alternate; opacity:.45; }
[data-fx-background="mesh"]>.pf-fx-background .pf-fx-wash { display:block; background:radial-gradient(at 15% 20%,var(--fx-a),transparent 45%),radial-gradient(at 85% 15%,var(--fx-b),transparent 40%),radial-gradient(at 55% 90%,var(--fx-a),transparent 50%); filter:blur(55px); animation:pf-mesh var(--fx-duration) ease-in-out infinite alternate; }
[data-fx-background="orbs"]>.pf-fx-background .pf-fx-wash { display:block; opacity:.3; }
[data-fx-background="orbs"]>.pf-fx-background .pf-fx-shape { display:block; inset:10% auto auto 4%; width:min(60vw,700px); aspect-ratio:1; border-radius:50%; background:radial-gradient(circle at 32% 25%,color-mix(in srgb,var(--fx-b) 70%,white),var(--fx-a) 48%,transparent 73%); box-shadow:55vw 35vh 80px -80px var(--fx-b); filter:blur(4px); opacity:.6; animation:pf-float var(--fx-duration) ease-in-out infinite alternate; }
[data-fx-background="stars"]>.pf-fx-background .pf-fx-wash { display:block; opacity:.25; }
.pf-fx-particles span { position:absolute; left:var(--x); top:var(--y); width:var(--size); height:var(--size); border-radius:50%; background:var(--fx-b); animation:pf-particle calc(var(--fx-duration)*.8) ease-in-out infinite alternate; animation-delay:var(--delay); }
.pf-fx-particles span[hidden] { display:none; }
[data-fx-background="stars"]>.pf-fx-background .pf-fx-particles { display:block; }
[data-fx-background="stars"]>.pf-fx-background .pf-fx-particles span { box-shadow:0 0 12px var(--fx-b); animation-name:pf-twinkle; }
[data-fx-background="particles"]>.pf-fx-background .pf-fx-particles { display:block; }
[data-fx-background="particles"]>.pf-fx-background .pf-fx-particles span { width:calc(var(--size)*8); height:calc(var(--size)*8); background:radial-gradient(circle,var(--fx-a),transparent 70%); }
[data-fx-background="waves"]>.pf-fx-background .pf-fx-shape { display:block; inset:35% -25% -60%; border-radius:44%; background:linear-gradient(130deg,color-mix(in srgb,var(--fx-a) 80%,transparent),var(--fx-b)); animation:pf-wave var(--fx-duration) ease-in-out infinite alternate; }
[data-fx-background="waves"]>.pf-fx-background .pf-fx-shape:after { content:""; position:absolute; inset:12% -5% -5%; border-radius:44%; background:var(--fx-a); opacity:.5; transform:rotate(25deg); }
.pf-fx-grid { background-image:linear-gradient(color-mix(in srgb,var(--fx-a) 50%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--fx-b) 40%,transparent) 1px,transparent 1px); background-size:64px 64px; mask-image:radial-gradient(ellipse at center,black,transparent 75%); }
[data-fx-background="grid"]>.pf-fx-background .pf-fx-grid { display:block; animation:pf-grid var(--fx-duration) linear infinite; }
[data-fx-background="horizon"]>.pf-fx-background .pf-fx-grid { display:block; inset:25% -55% -70%; transform:perspective(500px) rotateX(58deg) scale(var(--fx-scale)); transform-origin:50% 20%; animation:pf-grid calc(var(--fx-duration)*.5) linear infinite; }
[data-fx-background="horizon"]>.pf-fx-background .pf-fx-wash { display:block; background:radial-gradient(ellipse at 50% 50%,var(--fx-a),transparent 60%); opacity:.5; }
[data-fx-background="contours"]>.pf-fx-background .pf-fx-shape { display:block; inset:10% auto auto 35%; width:90vmax; aspect-ratio:1; border-radius:50%; background:repeating-radial-gradient(ellipse at 30% 45%,transparent 0 60px,color-mix(in srgb,var(--fx-b) 70%,transparent) 61px 62px,transparent 63px 90px); animation:pf-orbit-shape var(--fx-duration) linear infinite; }
[data-fx-background="prism"]>.pf-fx-background .pf-fx-shape { display:block; inset:-20%; background:conic-gradient(from 35deg at 35% 55%,transparent,var(--fx-a),transparent 40%,var(--fx-b),transparent 80%); filter:blur(12px); animation:pf-prism var(--fx-duration) ease-in-out infinite alternate; }
[data-fx-background="rays"]>.pf-fx-background .pf-fx-wash { display:block; background:repeating-conic-gradient(from -35deg at 50% -5%,transparent 0deg 12deg,var(--fx-a) 14deg,var(--fx-b) 16deg,transparent 19deg 30deg); mask-image:linear-gradient(black,transparent 90%); filter:blur(8px); animation:pf-rays var(--fx-duration) ease-in-out infinite alternate; opacity:.55; }
[data-fx-background="code"]>.pf-fx-background .pf-fx-code { display:flex; inset:-50% 0; justify-content:space-around; font:12px/1.8 ui-monospace,monospace; color:var(--fx-a); }
.pf-fx-code span { white-space:pre; opacity:.35; animation:pf-code var(--fx-duration) linear infinite; animation-delay:var(--delay); }
.pf-fx-code span:nth-child(3n) { color:var(--fx-b); opacity:.65; animation-duration:calc(var(--fx-duration)*1.5); }

/* Surfaces retain a strong opaque base to protect text contrast. */
.pf-fx-scope :is(.pf-main,.pf-page-card,.pf-project-card,.pf-gallery-card,.pf-fx-panel) { position:relative; }
.pf-fx-scope :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel) { isolation:isolate; }
.pf-fx-scope[data-fx-panel-style="glass"] :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel),
.pf-fx-scope[data-fx-panel-style="frosted"] :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel) {
  background:color-mix(in srgb,var(--fx-surface) var(--fx-opacity),transparent);
  -webkit-backdrop-filter:blur(var(--fx-blur)) saturate(135%); backdrop-filter:blur(var(--fx-blur)) saturate(135%);
  box-shadow:0 16px 48px #00000018,inset 0 1px 0 #ffffff15;
}
.pf-fx-scope[data-fx-panel-style="frosted"] :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel) { background:linear-gradient(135deg,#ffffff09,transparent 70%),color-mix(in srgb,var(--fx-surface) var(--fx-opacity),transparent); backdrop-filter:blur(calc(var(--fx-blur) + 10px)) saturate(90%); }
.pf-fx-scope[data-fx-panel-style="gradient"] :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel) { background:linear-gradient(150deg,color-mix(in srgb,var(--fx-a) 10%,var(--fx-surface)),var(--fx-surface) 55%,color-mix(in srgb,var(--fx-b) 7%,var(--fx-surface))); }
.pf-fx-scope[data-fx-panel-style="raised"] :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel) { background:linear-gradient(145deg,color-mix(in srgb,var(--fx-surface) 95%,white),var(--fx-surface)); box-shadow:8px 12px 0 color-mix(in srgb,var(--fx-surface) 90%,black),14px 30px 50px #00000035,inset 0 1px 0 #ffffff12; }
.pf-fx-scope[data-fx-panel-style="outline"] :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel) { background:var(--fx-surface); border:1px solid color-mix(in srgb,var(--fx-a) 40%,var(--fx-line)); box-shadow:none; }
.pf-fx-scope[data-fx-panel-border="glow"] :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel) { box-shadow:0 0 0 1px color-mix(in srgb,var(--fx-a) 35%,transparent),0 0 30px color-mix(in srgb,var(--fx-a) 12%,transparent); }
.pf-fx-scope:is([data-fx-panel-border="orbit"],[data-fx-panel-border="shimmer"]) :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel):before {
  content:""; position:absolute; inset:0; z-index:3; border-radius:inherit; padding:1.5px; pointer-events:none;
  background:conic-gradient(from var(--pf-orbit-angle),transparent 65%,var(--fx-a) 80%,var(--fx-b) 90%,transparent 100%);
  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0); -webkit-mask-composite:xor;
  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0); mask-composite:exclude;
  animation:pf-border calc(var(--fx-duration)*.4) linear infinite;
}
.pf-fx-scope[data-fx-panel-border="shimmer"] :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel):before { background:linear-gradient(110deg,transparent 30%,var(--fx-b) 50%,transparent 70%); background-size:300% 100%; animation:pf-shimmer calc(var(--fx-duration)*.4) ease-in-out infinite; }
@supports not (mask-composite:exclude) {
  .pf-fx-scope:is([data-fx-panel-border="orbit"],[data-fx-panel-border="shimmer"]) :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel):before { display:none; }
}
@media (hover:hover) and (pointer:fine) and (min-width:901px) {
  .pf-fx-scope:is([data-fx-panel-hover="lift"],[data-fx-panel-hover="tilt"]) .pf-main { animation:none; }
  .pf-fx-scope:not([data-motion="off"])[data-fx-panel-hover="lift"] :is(.pf-profile,.pf-main,.pf-page-card,.pf-project-card,.pf-fx-panel,[data-fx-card]) { transition:transform .3s ease,box-shadow .3s ease; transition-duration:.3s,.3s!important; }
  /* Marked by effects.js, which keeps a raised panel raised while the pointer is still on its resting place. */
  .pf-fx-scope:not([data-motion="off"])[data-fx-panel-hover="lift"] :is(.pf-profile,.pf-main,.pf-page-card,.pf-project-card,.pf-fx-panel,[data-fx-card])[data-fx-lifted] { transform:translateY(-5px); }
  /* Follow the pointer quickly, but settle back slowly once it leaves. */
  /* Elementor zeroes all durations with !important for reduced motion. Preserve
     the portfolio's enabled effects only, including their slower return state. */
  .pf-fx-scope:not([data-motion="off"])[data-fx-panel-hover="tilt"] [data-fx-tiltable] { transform:perspective(1400px) rotateX(var(--fx-rx,0deg)) rotateY(var(--fx-ry,0deg)); transition:transform .8s cubic-bezier(.22,1,.36,1),border-color .3s ease,box-shadow .3s ease; transition-duration:.8s,.3s,.3s!important; }
  .pf-fx-scope:not([data-motion="off"])[data-fx-panel-hover="tilt"] [data-fx-tiltable][data-fx-tilting] { transition:transform .22s ease-out,border-color .3s ease,box-shadow .3s ease; transition-duration:.22s,.3s,.3s!important; }
  .pf-fx-scope:not([data-motion="off"])[data-fx-panel-hover="tilt"] [data-fx-tiltable]:after { content:""; position:absolute; pointer-events:none; inset:0; z-index:2; border-radius:inherit; background:radial-gradient(circle at var(--fx-px,50%) var(--fx-py,50%),#ffffff12,transparent 60%); opacity:0; transition:opacity .25s; }
  .pf-fx-scope:not([data-motion="off"])[data-fx-panel-hover="tilt"] [data-fx-tiltable][data-fx-tilting]:after { opacity:1; }
}
.pf-fx-scope[data-fx-heading-effect="glow"] :is(h1,h2,h3,h4,.pf-profile-name) { text-shadow:0 0 28px color-mix(in srgb,var(--fx-a) 40%,transparent); }
.pf-fx-scope[data-fx-heading-effect="underline"] :is(h1,h2,h3,h4,.pf-profile-name) { text-decoration:underline; text-decoration-color:var(--fx-a); text-decoration-thickness:2px; text-underline-offset:.24em; }
.pf-fx-scope[data-fx-heading-effect="shine"] :is(h1,h2,h3,h4,.pf-profile-name) { animation:pf-title calc(var(--fx-duration)*.45) ease-in-out infinite; }

/* Large portrait, using the same private/public image lifecycle as the profile. */
.pf-fx-scope .pf-avatar { overflow:hidden; }
.pf-fx-scope .pf-avatar img { object-position:50% var(--fx-photo-position); transform:scale(var(--fx-photo-zoom)); transition:transform .6s ease,filter .6s ease; }
.pf-fx-scope:not([data-motion="off"]) .pf-avatar img { transition-duration:.6s,.6s!important; }
.pf-fx-scope[data-fx-profile-style="portrait"] .pf-profile-art { display:none; }
.pf-fx-scope[data-fx-profile-style="portrait"] .pf-avatar { width:100%; height:var(--fx-photo-height); max-height:65vh; border:0; border-radius:0; margin:0; font-size:80px; background:linear-gradient(135deg,color-mix(in srgb,var(--fx-a) 25%,var(--panel)),var(--panel-soft)); }
.pf-fx-scope[data-fx-profile-style="portrait"] .pf-avatar img { width:100%; height:100%; object-fit:cover; border-radius:0; }
.pf-fx-scope[data-fx-profile-style="portrait"] .pf-profile-body { position:relative; padding-top:28px; }
.pf-fx-scope[data-fx-profile-style="portrait"] .pf-profile-body:before { content:""; pointer-events:none; position:absolute; bottom:100%; inset-inline:0; height:70px; background:linear-gradient(transparent,var(--fx-surface)); }
.pf-fx-scope[data-fx-photo-effect="duotone"] .pf-avatar img { filter:grayscale(1) contrast(1.1); mix-blend-mode:luminosity; }
.pf-fx-scope[data-fx-photo-effect="duotone"] .pf-avatar { background:var(--fx-a); }
.pf-fx-scope[data-fx-photo-effect="mono"] .pf-avatar img { filter:grayscale(1); }
.pf-fx-scope[data-fx-photo-effect="shine"] .pf-avatar:after { content:""; position:absolute; inset:-30% -100%; background:linear-gradient(110deg,transparent 40%,#ffffff33 50%,transparent 60%); pointer-events:none; animation:pf-photo-shine calc(var(--fx-duration)*.5) ease-in-out infinite; }
@media (hover:hover) and (pointer:fine) {
  .pf-fx-scope:not([data-motion="off"])[data-fx-photo-effect="zoom"] .pf-avatar:is(:hover,[data-fx-hover]) img { transform:scale(calc(var(--fx-photo-zoom)*1.07)); }
  .pf-fx-scope:not([data-motion="off"])[data-fx-photo-effect="mono"] .pf-avatar:is(:hover,[data-fx-hover]) img { filter:grayscale(0); }
}
@media(max-width:900px) {
  /* Anchor absolute border effects after the theme disables sticky positioning. */
  .pf-fx-scope .pf-navigation { position:relative; top:auto; }
  .pf-fx-scope[data-fx-profile-style="portrait"] .pf-avatar { height:min(var(--fx-photo-height),85vw); max-height:440px; }
  .pf-fx-scope[data-fx-profile-style="portrait"] .pf-profile { display:block; }
  .pf-fx-scope[data-fx-profile-style="portrait"] .pf-profile-body { width:100%; }
  .pf-fx-particles span:nth-child(n+21),.pf-fx-code span:nth-child(even) { display:none; }
  .pf-fx-scope:is([data-fx-panel-style="glass"],[data-fx-panel-style="frosted"]) :is(.pf-main,.pf-profile,.pf-navigation) { backdrop-filter:blur(min(var(--fx-blur),12px)); }
}
@media(max-width:640px) {
  .pf-fx-scope .pf-profile { position:relative; top:auto; }
}

.pf-rotating-role { display:block; min-width:0; }
.pf-fx-sr { position:absolute!important; width:1px!important; height:1px!important; padding:0!important; margin:-1px!important; overflow:hidden!important; clip-path:inset(50%)!important; white-space:nowrap!important; border:0!important; }
.pf-role-stage { display:grid; position:relative; overflow:hidden; }
.pf-role-stage>span { grid-area:1/1; min-width:0; overflow-wrap:anywhere; }
.pf-role-measure { visibility:hidden; pointer-events:none; }
.pf-role-text { transition:opacity .3s ease,transform .3s ease,filter .3s ease; }
.pf-rotating-role[data-role-effect="typewriter"][data-role-running="true"] .pf-role-text:after { content:""; display:inline-block; height:1em; border-inline-end:1px solid currentColor; margin-inline-start:3px; vertical-align:-.1em; }
.pf-rotating-role.is-changing .pf-role-text { opacity:0; }
.pf-rotating-role[data-role-effect="slide"].is-changing .pf-role-text { transform:translateY(12px); }
.pf-rotating-role[data-role-effect="blur"].is-changing .pf-role-text { filter:blur(5px); }
.pf-motion-toggle { border:1px solid var(--line,#ffffff26); background:var(--panel,#191e28); color:var(--muted,#b7c2d8); border-radius:30px; padding:7px 12px; font:500 11px/1.5 system-ui,sans-serif; cursor:pointer; }
.pf-motion-toggle[hidden] { display:none; }
.pf-motion-toggle:focus-visible { outline:3px solid var(--accent,#6495ff); outline-offset:3px; }
.pf-fx-scope[data-motion="off"] .pf-fx-background *, .pf-fx-scope[data-motion="off"] :is(h1,h2,h3,h4,.pf-profile-name),
.pf-fx-scope[data-motion="off"] :is(.pf-profile,.pf-main,.pf-navigation,.pf-page-card,.pf-project-card,.pf-fx-panel):before,
.pf-fx-scope[data-motion="off"] .pf-avatar:after { animation-play-state:paused!important; }
.pf-fx-scope[data-motion="off"] [data-fx-tiltable] { transform:none!important; }
.pf-fx-scope[data-motion="off"] .pf-avatar img { transition:none; }
.pf-fx-scope[data-motion="off"] .pf-role-text { transition:none!important; }
@keyframes pf-aurora { to { transform:translate(8%,-6%) rotate(12deg) scale(calc(var(--fx-scale)*1.15)); } }
@keyframes pf-ribbon { to { transform:rotate(-18deg) translateY(20%) scale(var(--fx-scale)); } }
@keyframes pf-mesh { to { transform:rotate(-12deg) scale(calc(var(--fx-scale)*1.25)); } }
@keyframes pf-float { to { transform:translate(15%,12%) scale(calc(var(--fx-scale)*.92)); } }
@keyframes pf-particle { to { transform:translate(25px,-100px); opacity:.2; } }
@keyframes pf-twinkle { 0%,100% { opacity:.25; } 50% { opacity:1; transform:scale(1.4); } }
@keyframes pf-wave { to { transform:rotate(22deg) translateY(-10%) scale(var(--fx-scale)); } }
@keyframes pf-grid { to { background-position:64px 64px; } }
@keyframes pf-orbit-shape { to { transform:rotate(360deg) scale(var(--fx-scale)); } }
@keyframes pf-prism { to { transform:rotate(35deg) scale(calc(var(--fx-scale)*1.2)); } }
@keyframes pf-rays { to { transform:rotate(8deg) scale(calc(var(--fx-scale)*1.2)); } }
@keyframes pf-code { to { transform:translateY(35%); } }
@keyframes pf-border { to { --pf-orbit-angle:360deg; } }
@keyframes pf-shimmer { 0%,100% { background-position:100% 0; } 50% { background-position:0 0; } }
@keyframes pf-title { 0%,100% { text-shadow:0 0 0 transparent; } 50% { text-shadow:0 0 20px color-mix(in srgb,var(--fx-b) 55%,transparent); } }
@keyframes pf-photo-shine { 0%,35% { transform:translateX(-40%); } 80%,100% { transform:translateX(40%); } }
