/* ===== Matching sets (2026.10.23f) ===== */
/* set wraps: drawn on a 300x340 card and stretched round the profile card */
.nsw.nsw-set{overflow:visible}
.nsw-set .nsw-in{inset:0}
.nsw-set>svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.nsw-mini .nsw-set>svg{inset:0}
/* set fonts (they keep their own colours) */
.nsf-cinzel{font-family:Cinzel,serif;font-weight:700;color:#F3FF3A;text-shadow:2px 2px 0 #C65AAE}
.nsf-vt323{display:inline-block;font-family:VT323,monospace;font-size:1.25em;color:#F4F7FF;text-shadow:2px 0 #C65AAE,-2px 0 #00F0FF;animation:nsGlitch 3s steps(1,end) infinite}
.nsf-vt323::after{content:"_";color:#00F0FF;animation:crBlink 1s steps(1) infinite}
.nsf-soulpixel{font-family:"Press Start 2P",monospace;font-size:.62em;color:#E6FFFB;text-shadow:0 0 4px #00F0FF,0 0 10px rgba(0,240,255,.7);animation:nsFlicker 2.4s infinite}
.nsf-frost{font-family:Fredoka,sans-serif;font-weight:600;color:transparent;background:linear-gradient(180deg,#FFFFFF,#BFE3FF);-webkit-background-clip:text;background-clip:text}
.nsf-bloomscript{font-family:Pacifico,cursive;color:#FF7AD9;text-shadow:0 0 6px rgba(255,79,216,.8)}
.nsf-starlight{font-family:Orbitron,sans-serif;font-weight:900;color:#FFFFFF;text-shadow:0 0 6px rgba(79,168,255,.9)}
.nsf-sunset{font-family:Audiowide,sans-serif;color:transparent;background:linear-gradient(180deg,#F3FF3A,#FF9A2E 55%,#C65AAE 56%,#7A2CA0);-webkit-background-clip:text;background-clip:text}
.nsf-bubblegum{font-family:"Baloo 2",sans-serif;font-weight:800;color:#FF7AD9;-webkit-text-stroke:1.2px #FFFFFF;paint-order:stroke fill}
.nsf-corona{font-family:Bungee,sans-serif;color:transparent;background:linear-gradient(90deg,#F3FF3A,#FF9A2E 50%,#7F9BFF);-webkit-background-clip:text;background-clip:text}
/* set tiles */
.ns-grid.sets{grid-template-columns:1fr}
.ns-set{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;align-items:center;width:100%}
.ns-set .face{grid-row:span 2;width:44px;height:44px;margin:10px 8px;font-size:20px}
.ns-set .ns-pv{font-size:20px}
.ns-set .ns-parts{grid-column:2;font-size:12px;color:var(--muted);line-height:1.3}
@media (prefers-reduced-motion:reduce){.nsw-set *,.nsf-vt323,.nsf-vt323::after,.nsf-soulpixel{animation:none!important}}
@keyframes nst_tw{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.2;transform:scale(.55)}}
.nsw-set .tw0{animation:nst_tw 2.2s ease-in-out infinite}
.nsw-set .tw1{animation:nst_tw 3s ease-in-out infinite .7s}
.nsw-set .tw2{animation:nst_tw 2.6s ease-in-out infinite 1.4s}
@keyframes nst_drift{0%,100%{transform:translateX(-3px)}50%{transform:translateX(4px)}}
.nsw-set .drift{animation:nst_drift 6s ease-in-out infinite}
.nsw-set .drift2{animation:nst_drift 7.5s ease-in-out infinite reverse}
@keyframes nst_flk{0%,100%{transform:scaleY(1) skewX(0)}30%{transform:scaleY(1.25) skewX(-5deg)}65%{transform:scaleY(.85) skewX(4deg)}}
.nsw-set .flk{transform-box:fill-box;transform-origin:50% 100%;animation:nst_flk .8s ease-in-out infinite}
@keyframes nst_glowp{0%,100%{opacity:.75}50%{opacity:1}}
.nsw-set .glowp{animation:nst_glowp 2.4s ease-in-out infinite}
@keyframes nst_spin{to{transform:rotate(360deg)}}
.nsw-set .spin{transform-origin:100px 100px;animation:nst_spin 5s linear infinite}
@keyframes nst_hb{0%,100%{transform:scale(1);opacity:.7}15%{transform:scale(1.35);opacity:1}30%{transform:scale(1);opacity:.8}}
.nsw-set .hb{transform-box:fill-box;transform-origin:50% 50%;animation:nst_hb 2.4s ease-in-out infinite}
@keyframes nst_tail{0%,100%{transform:rotate(0)}50%{transform:rotate(-10deg)}}
.nsw-set .tail{transform-origin:130px 170px;animation:nst_tail 2.6s ease-in-out infinite}
@keyframes nst_ear{0%,86%,100%{transform:rotate(0)}90%{transform:rotate(-9deg)}94%{transform:rotate(3deg)}}
.nsw-set .ear{transform-box:fill-box;transform-origin:50% 100%;animation:nst_ear 4s ease-in-out infinite}
@keyframes nst_draw{0%{stroke-dashoffset:600}45%,85%{stroke-dashoffset:0;opacity:1}100%{stroke-dashoffset:0;opacity:0}}
.nsw-set .draw{stroke-dasharray:600;animation:nst_draw 6s ease-in-out infinite}
@keyframes nst_corona{0%,100%{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.05)}}
.nsw-set .corona{transform-origin:100px 100px;animation:nst_corona 3.2s ease-in-out infinite}
@keyframes nst_rise{0%{transform:translateY(0);opacity:0}20%{opacity:1}100%{transform:translateY(-40px);opacity:0}}
.nsw-set .rise{animation:nst_rise 3s linear infinite}
@keyframes nst_ringshine{to{transform:rotate(360deg)}}
@keyframes nst_bloomp{0%,100%{transform:scale(1)}50%{transform:scale(1.12)}}
.nsw-set .bloomp{animation:nst_bloomp 3s ease-in-out infinite}
@keyframes nst_gf4{0%,24.9%{opacity:1}25%,100%{opacity:0}}
.nsw-set .gf4{opacity:0;animation:nst_gf4 .48s linear infinite}
@keyframes nst_orbit{to{transform:rotate(360deg)}}
.nsw-set .orbit{transform-origin:100px 100px;animation:nst_orbit 6s linear infinite}
@keyframes nst_fall2{0%{transform:translateY(0);opacity:0}15%{opacity:1}100%{transform:translateY(200px);opacity:0}}
.nsw-set .fall2{animation:nst_fall2 4s linear infinite}
.nsw-set .ringshine{transform-origin:100px 100px;animation:nst_ringshine 4s linear infinite}
@keyframes nst_sunspin{0%,100%{filter:drop-shadow(0 0 3px rgba(243,255,58,.6))}50%{filter:drop-shadow(0 0 8px rgba(243,255,58,.95))}}
.nsw-set .sunspin{animation:nst_sunspin 3s ease-in-out infinite}
@keyframes nst_gsl2{0%,14%{opacity:0;transform:translateX(0)}15%{opacity:1;transform:translateX(-10px)}17%{transform:translateX(8px)}19%{transform:translateX(-4px)}21%{opacity:1;transform:translateX(9px)}22%,64%{opacity:0;transform:translateX(0)}65%{opacity:1;transform:translateX(7px)}67%{transform:translateX(-9px)}69%{opacity:1;transform:translateX(3px)}70%,100%{opacity:0}}
.nsw-set .gsl2{opacity:0;animation:nst_gsl2 5s steps(1,end) infinite}
@keyframes nst_scanbar{0%{transform:translateY(0)}100%{transform:translateY(120px)}}
.nsw-set .scanbar{animation:nst_scanbar 2.2s linear infinite}
@keyframes nst_lock{0%,20%{transform:scale(1.5);opacity:0}28%{transform:scale(.9);opacity:1}32%,90%{transform:scale(1);opacity:1}100%{opacity:.4}}
.nsw-set .lock{animation:nst_lock 5s cubic-bezier(.2,1.4,.4,1) infinite}
@keyframes nst_rain2{0%{transform:translateY(0)}100%{transform:translateY(400px)}}
.nsw-set .rain2{animation:nst_rain2 2.4s linear infinite;opacity:.8}
@keyframes nst_grant2{0%,39%{opacity:0;transform:scale(2) rotate(-6deg)}42%{opacity:1;transform:scale(.95) rotate(0)}44%,60%{opacity:1;transform:scale(1)}63%,100%{opacity:0}}
.nsw-set .grant2{opacity:0;transform-origin:96px 178px;animation:nst_grant2 5s cubic-bezier(.2,1.4,.4,1) infinite;filter:drop-shadow(0 0 6px rgba(255,79,216,.6))}
@keyframes nst_gsl{0%,9%{opacity:0;transform:translateX(0)}10%{opacity:1;transform:translateX(-14px)}12%{transform:translateX(10px)}14%{transform:translateX(-5px)}16%{transform:translateX(13px)}18%{opacity:1;transform:translateX(0)}19%,74%{opacity:0}75%{opacity:1;transform:translateX(15px)}77%{transform:translateX(-11px)}79%{transform:translateX(6px)}81%{opacity:1;transform:translateX(-3px)}82%,100%{opacity:0;transform:translateX(0)}}
.nsw-set .gsl{opacity:0;animation:nst_gsl 8s steps(1,end) infinite}
@keyframes nst_hackph{0%,17%{opacity:0}21%,72%{opacity:1}78%,100%{opacity:0}}
.nsw-set .hackph{opacity:0;animation:nst_hackph 8s linear infinite}
@keyframes nst_termph{0%,24%{opacity:0;transform:scale(.9)}26%,70%{opacity:1;transform:scale(1)}73%,100%{opacity:0}}
.nsw-set .termph{opacity:0;transform-origin:120px 164px;animation:nst_termph 8s steps(4,end) infinite}
@keyframes nst_typ{0%,27%{transform:scaleX(0)}34%,100%{transform:scaleX(1)}}
.nsw-set .typ{transform-origin:20px 0;transform:scaleX(0);animation:nst_typ 8s steps(16,end) infinite}
@keyframes nst_rainc{0%{transform:translateY(0)}100%{transform:translateY(760px)}}
.nsw-set .rainc{animation:nst_rainc 2s linear infinite}
@keyframes nst_grant{0%,49%{opacity:0;transform:scale(2.4) rotate(-6deg)}52%{opacity:1;transform:scale(.95) rotate(0)}54%,68%{opacity:1;transform:scale(1)}71%,100%{opacity:0;transform:scale(1)}}
.nsw-set .grant{opacity:0;transform-origin:120px 250px;animation:nst_grant 8s cubic-bezier(.2,1.4,.4,1) infinite;filter:drop-shadow(0 0 8px rgba(255,79,216,.6))}
@keyframes nst_flashbars{0%,9%,19%,74%,83%,100%{opacity:0}10%,13%,16%,75%,78%,81%{opacity:1}11%,14%,17%,76%,79%,82%{opacity:0}}
.nsw-set .flashbars{opacity:0;animation:nst_flashbars 8s steps(1,end) infinite}
@keyframes nst_burnmove{0%,6%{transform:translateY(392px)}38%,100%{transform:translateY(-14px)}}
.nsw-set .burnmove{animation:nst_burnmove 8s cubic-bezier(.45,.05,.55,.95) infinite}
@keyframes nst_burnedge{0%,4%{opacity:0}8%,36%{opacity:1}42%,100%{opacity:0}}
.nsw-set .burnedge{animation:nst_burnmove 8s cubic-bezier(.45,.05,.55,.95) infinite,nst_burnedge 8s linear infinite}
@keyframes nst_burnscene{0%,72%{opacity:1}88%,100%{opacity:0}}
.nsw-set .burnscene{animation:nst_burnscene 8s ease-in-out infinite}
@keyframes nst_gf{0%,24.9%{opacity:1}25%,100%{opacity:0}}
.nsw-set .gf{opacity:0;animation:nst_gf .6s linear infinite}
@keyframes nst_gfloat{0%{transform:translateY(40px);opacity:0}15%{opacity:1}50%{transform:translateY(-10px) translateX(4px)}85%{opacity:1}100%{transform:translateY(-70px);opacity:0}}
.nsw-set .gfloat{animation:nst_gfloat 6s ease-in-out infinite}
@keyframes nst_pflk{0%{transform:scaleY(1)}33%{transform:scaleY(1.3)}66%{transform:scaleY(.8)}100%{transform:scaleY(1)}}
.nsw-set .pflk{animation:nst_pflk .6s steps(3) infinite}
@keyframes nst_shoot{0%,45%{transform:translate(-30px,40px);opacity:0}50%{opacity:1}75%,100%{transform:translate(300px,180px);opacity:0}}
.nsw-set .shoot{animation:nst_shoot 5s ease-in infinite}
@keyframes nst_gridmove{0%{transform:translateY(0)}100%{transform:translateY(8px)}}
.nsw-set .gridmove{animation:nst_gridmove 1s linear infinite}
@keyframes nst_sweep{0%,50%{transform:skewX(-20deg) translateX(0)}100%{transform:skewX(-20deg) translateX(560px)}}
.nsw-set .sweep{animation:nst_sweep 4s ease-in-out infinite}
@keyframes nst_sunspin{0%,100%{filter:drop-shadow(0 0 4px rgba(243,255,58,.6))}50%{filter:drop-shadow(0 0 10px rgba(243,255,58,.95))}}
.nsw-set .sunspin{animation:nst_sunspin 3s ease-in-out infinite}
@keyframes nst_fall{0%{transform:translateY(0)}100%{transform:translateY(380px)}}
.nsw-set .fall{animation:nst_fall 14s linear infinite}
@keyframes nst_flarefly{0%,40%{transform:translate(-40px,60px) scale(.4);opacity:0}55%{opacity:1;transform:translate(110px,150px) scale(1.2)}70%,100%{transform:translate(280px,240px) scale(.5);opacity:0}}
.nsw-set .flarefly{animation:nst_flarefly 6s ease-in-out infinite}
@keyframes nst_prise{0%{transform:translateY(80px)}50%{transform:translateY(-130px)}100%{transform:translateY(80px)}}
.nsw-set .prise{animation:nst_prise 10s ease-in-out infinite}
@keyframes nst_rgbA{0%,86%,100%{transform:translate(0,0);opacity:0}88%{transform:translate(-3px,0);opacity:1}92%{transform:translate(2px,1px);opacity:1}95%{opacity:0}}
@keyframes nst_rgbB{0%,86%,100%{transform:translate(0,0);opacity:0}88%{transform:translate(3px,0);opacity:1}92%{transform:translate(-2px,-1px);opacity:1}95%{opacity:0}}
.nsw-set .rgbA{animation:nst_rgbA 3s steps(1,end) infinite}
.nsw-set .rgbB{animation:nst_rgbB 3s steps(1,end) infinite}
@keyframes nst_caret{50%{opacity:0}}
.nsw-set .caret{animation:nst_caret 1s steps(1,end) infinite}
@keyframes nst_dashrun{to{stroke-dashoffset:-64}}
.nsw-set .dashrun{animation:nst_dashrun 2s linear infinite}
@keyframes nst_soulglow{0%,100%{filter:drop-shadow(0 0 4px #00F0FF) drop-shadow(0 0 1px #C65AAE)}30%{filter:drop-shadow(0 0 9px #00F0FF) drop-shadow(0 -2px 3px #E6FFFB)}60%{filter:drop-shadow(0 0 5px #00F0FF)}}
.nsw-set .soulglow{animation:nst_soulglow .9s steps(3,end) infinite}
@keyframes nst_sweep{0%,50%{transform:skewX(-20deg) translateX(0)}100%{transform:skewX(-20deg) translateX(620px)}}
.nsw-set .sweep{animation:nst_sweep 4s ease-in-out infinite}
