/* Real 3D filaments: gather → weave → open → return, in a seamless 24s story.
   CSS owns the timeline, so loading or typing cannot stall a JavaScript renderer.
   No animated layout properties, filters, or global pointer listeners. */
.weave-scene,.sculpture-toggle { display:none; }
.weave-visual { position:absolute; inset:0; }
@media (prefers-reduced-motion:no-preference) and (min-width:701px) {
  .login-art .login-sculpture { display:none; }
  .login-art .weave-scene { display:block; }
  .login-art .sculpture-toggle { display:flex; }
}
@media (prefers-reduced-motion:no-preference) and (max-width:700px) {
  .login-art .login-sculpture { display:none; }
  .login-art .weave-scene { display:block; }
  .login-art .sculpture-toggle { display:flex; }
}
.weave-scene { position:absolute; inset:0; perspective:720px; perspective-origin:50% 46%; }
.weave-drift,.weave-turn,.weave-threads,.weave-latitudes { position:absolute; width:0; height:0; transform-style:preserve-3d; }
.weave-drift { left:50%; top:51%; animation:weave-drift 24s var(--k-ease) infinite; }
.weave-turn { animation:weave-precession 24s linear infinite; }
.weave-thread { position:absolute; left:-46px; top:-46px; width:92px; height:92px; border:1px solid rgba(224,216,202,.44); border-radius:50%; transform-style:preserve-3d; animation:weave-form 24s var(--k-ease) infinite; }
.weave-thread b { position:absolute; inset:-1px; border:1px solid transparent; border-top-color:rgba(255,248,231,.94); border-right-color:rgba(242,232,211,.16); border-radius:50%; animation:weave-current 8s linear infinite; }
.weave-thread:nth-child(3n) b { display:none; }
.weave-latitudes { animation:weave-latitude-presence 24s var(--k-ease) infinite; }
.weave-latitude { position:absolute; left:0; top:0; border:1px solid rgba(209,204,192,.13); border-radius:50%; }
.weave-orbit { position:absolute; left:-194px; top:-194px; width:388px; height:388px; border:1px solid rgba(211,206,191,.08); border-radius:50%; transform-style:preserve-3d; }
.orbit-one { transform:rotateX(27deg) rotateY(18deg); }
.orbit-two { transform:rotateX(-35deg) rotateY(-22deg) scale(.95); }
.weave-orbit > i { position:absolute; inset:0; border-radius:50%; animation:weave-current 18s linear infinite; }
.orbit-two > i { animation-direction:reverse; animation-delay:-7s; }
.weave-orbit > i::after { content:''; position:absolute; top:-2px; left:50%; width:4px; height:4px; background:#d8d1c3; border-radius:50%; }
.sculpture-toggle { position:absolute; right:12px; bottom:-10px; min-height:32px; gap:7px; align-items:center; padding:4px 7px; color:var(--k-muted); font:12px var(--k-font); cursor:pointer; pointer-events:auto; border-radius:5px; }
.sculpture-toggle input { position:absolute; inset:0; opacity:0; width:100%; height:100%; margin:0; cursor:pointer; }
.sculpture-toggle:has(input:focus-visible) { outline:1px solid var(--k-accent); outline-offset:3px; }
.sculpture-pause-icon { width:8px; height:9px; border-left:2px solid currentColor; border-right:2px solid currentColor; }
.sculpture-play-copy { display:none; }
.sculpture-toggle:has(input:checked) .sculpture-pause-copy { display:none; }
.sculpture-toggle:has(input:checked) .sculpture-play-copy { display:inline; }
.sculpture-toggle:has(input:checked) .sculpture-pause-icon { border:0; width:0; height:0; border-top:5px solid transparent; border-bottom:5px solid transparent; border-left:7px solid currentColor; }
.login-art:has(.sculpture-toggle input:checked) .weave-visual * { animation-play-state:paused; }
@keyframes weave-precession {
  0% { transform:rotateX(55deg) rotateY(-14deg) rotateZ(-26deg); }
  25% { transform:rotateX(72deg) rotateY(12deg) rotateZ(64deg); }
  50% { transform:rotateX(48deg) rotateY(24deg) rotateZ(154deg); }
  75% { transform:rotateX(32deg) rotateY(-8deg) rotateZ(244deg); }
  100% { transform:rotateX(55deg) rotateY(-14deg) rotateZ(334deg); }
}
@keyframes weave-drift {
  0%,100% { transform:translateY(0); }
  36% { transform:translateY(-9px); }
  72% { transform:translateY(6px); }
}
@keyframes weave-form {
  0%,100% { transform:rotateZ(var(--azimuth)) translate3d(116px,0,0) rotateY(90deg) rotateZ(0deg); opacity:.88; }
  18% { transform:rotateZ(var(--azimuth)) translate3d(116px,0,0) rotateY(90deg) rotateZ(30deg); opacity:.88; }
  38% { transform:rotateZ(var(--azimuth)) translate3d(132px,0,var(--lift)) rotateY(63deg) rotateZ(80deg) scale(.83); opacity:.65; }
  57% { transform:rotateZ(var(--azimuth)) translate3d(104px,0,var(--wave)) rotateY(108deg) rotateZ(160deg) scale(1.08); opacity:.92; }
  78% { transform:rotateZ(var(--azimuth)) translate3d(116px,0,0) rotateY(90deg) rotateZ(260deg); opacity:.88; }
}
@keyframes weave-current { to { transform:rotate(360deg); } }
@keyframes weave-latitude-presence { 0%,18%,78%,100% { opacity:1; } 34%,62% { opacity:0; } }
@media (max-width:1000px) and (min-width:701px) { .weave-scene { transform:scale(.85); } }
@media (max-width:700px) {
  .login-page .login-art { opacity:1; }
  .login-art .weave-visual { opacity:.65; }
  .weave-scene { transform:scale(.52); }
  .weave-thread:nth-child(even) { display:none; }
  .weave-thread b,.weave-orbit { display:none; }
  .sculpture-toggle { right:65px; bottom:0; font-size:12px; min-height:32px; }
}
@media (max-width:380px) { .weave-scene { transform:scale(.46); } .sculpture-toggle { right:74px; bottom:0; } .login-art .weave-visual { opacity:.45; } }
@media (prefers-reduced-motion:reduce) {
  .login-art .weave-scene,.login-art .sculpture-toggle { display:none; }
  .login-art .login-sculpture { display:block; }
  .weave-visual * { animation:none !important; }
}
.weave-thread:nth-child(1) { --azimuth:0deg; --lift:0.00px; --wave:0.00px; }
.weave-thread:nth-child(1) b { animation-delay:0.000s; }
.weave-thread:nth-child(2) { --azimuth:7.5deg; --lift:14.49px; --wave:9.18px; }
.weave-thread:nth-child(2) b { animation-delay:-0.167s; }
.weave-thread:nth-child(3) { --azimuth:15deg; --lift:28.00px; --wave:16.97px; }
.weave-thread:nth-child(3) b { animation-delay:-0.333s; }
.weave-thread:nth-child(4) { --azimuth:22.5deg; --lift:39.60px; --wave:22.17px; }
.weave-thread:nth-child(4) b { animation-delay:-0.500s; }
.weave-thread:nth-child(5) { --azimuth:30deg; --lift:48.50px; --wave:24.00px; }
.weave-thread:nth-child(5) b { animation-delay:-0.667s; }
.weave-thread:nth-child(6) { --azimuth:37.5deg; --lift:54.09px; --wave:22.17px; }
.weave-thread:nth-child(6) b { animation-delay:-0.833s; }
.weave-thread:nth-child(7) { --azimuth:45deg; --lift:56.00px; --wave:16.97px; }
.weave-thread:nth-child(7) b { animation-delay:-1.000s; }
.weave-thread:nth-child(8) { --azimuth:52.5deg; --lift:54.09px; --wave:9.18px; }
.weave-thread:nth-child(8) b { animation-delay:-1.167s; }
.weave-thread:nth-child(9) { --azimuth:60deg; --lift:48.50px; --wave:0.00px; }
.weave-thread:nth-child(9) b { animation-delay:-1.333s; }
.weave-thread:nth-child(10) { --azimuth:67.5deg; --lift:39.60px; --wave:-9.18px; }
.weave-thread:nth-child(10) b { animation-delay:-1.500s; }
.weave-thread:nth-child(11) { --azimuth:75deg; --lift:28.00px; --wave:-16.97px; }
.weave-thread:nth-child(11) b { animation-delay:-1.667s; }
.weave-thread:nth-child(12) { --azimuth:82.5deg; --lift:14.49px; --wave:-22.17px; }
.weave-thread:nth-child(12) b { animation-delay:-1.833s; }
.weave-thread:nth-child(13) { --azimuth:90deg; --lift:0.00px; --wave:-24.00px; }
.weave-thread:nth-child(13) b { animation-delay:-2.000s; }
.weave-thread:nth-child(14) { --azimuth:97.5deg; --lift:-14.49px; --wave:-22.17px; }
.weave-thread:nth-child(14) b { animation-delay:-2.167s; }
.weave-thread:nth-child(15) { --azimuth:105deg; --lift:-28.00px; --wave:-16.97px; }
.weave-thread:nth-child(15) b { animation-delay:-2.333s; }
.weave-thread:nth-child(16) { --azimuth:112.5deg; --lift:-39.60px; --wave:-9.18px; }
.weave-thread:nth-child(16) b { animation-delay:-2.500s; }
.weave-thread:nth-child(17) { --azimuth:120deg; --lift:-48.50px; --wave:-0.00px; }
.weave-thread:nth-child(17) b { animation-delay:-2.667s; }
.weave-thread:nth-child(18) { --azimuth:127.5deg; --lift:-54.09px; --wave:9.18px; }
.weave-thread:nth-child(18) b { animation-delay:-2.833s; }
.weave-thread:nth-child(19) { --azimuth:135deg; --lift:-56.00px; --wave:16.97px; }
.weave-thread:nth-child(19) b { animation-delay:-3.000s; }
.weave-thread:nth-child(20) { --azimuth:142.5deg; --lift:-54.09px; --wave:22.17px; }
.weave-thread:nth-child(20) b { animation-delay:-3.167s; }
.weave-thread:nth-child(21) { --azimuth:150deg; --lift:-48.50px; --wave:24.00px; }
.weave-thread:nth-child(21) b { animation-delay:-3.333s; }
.weave-thread:nth-child(22) { --azimuth:157.5deg; --lift:-39.60px; --wave:22.17px; }
.weave-thread:nth-child(22) b { animation-delay:-3.500s; }
.weave-thread:nth-child(23) { --azimuth:165deg; --lift:-28.00px; --wave:16.97px; }
.weave-thread:nth-child(23) b { animation-delay:-3.667s; }
.weave-thread:nth-child(24) { --azimuth:172.5deg; --lift:-14.49px; --wave:9.18px; }
.weave-thread:nth-child(24) b { animation-delay:-3.833s; }
.weave-thread:nth-child(25) { --azimuth:180deg; --lift:-0.00px; --wave:0.00px; }
.weave-thread:nth-child(25) b { animation-delay:-4.000s; }
.weave-thread:nth-child(26) { --azimuth:187.5deg; --lift:14.49px; --wave:-9.18px; }
.weave-thread:nth-child(26) b { animation-delay:-4.167s; }
.weave-thread:nth-child(27) { --azimuth:195deg; --lift:28.00px; --wave:-16.97px; }
.weave-thread:nth-child(27) b { animation-delay:-4.333s; }
.weave-thread:nth-child(28) { --azimuth:202.5deg; --lift:39.60px; --wave:-22.17px; }
.weave-thread:nth-child(28) b { animation-delay:-4.500s; }
.weave-thread:nth-child(29) { --azimuth:210deg; --lift:48.50px; --wave:-24.00px; }
.weave-thread:nth-child(29) b { animation-delay:-4.667s; }
.weave-thread:nth-child(30) { --azimuth:217.5deg; --lift:54.09px; --wave:-22.17px; }
.weave-thread:nth-child(30) b { animation-delay:-4.833s; }
.weave-thread:nth-child(31) { --azimuth:225deg; --lift:56.00px; --wave:-16.97px; }
.weave-thread:nth-child(31) b { animation-delay:-5.000s; }
.weave-thread:nth-child(32) { --azimuth:232.5deg; --lift:54.09px; --wave:-9.18px; }
.weave-thread:nth-child(32) b { animation-delay:-5.167s; }
.weave-thread:nth-child(33) { --azimuth:240deg; --lift:48.50px; --wave:-0.00px; }
.weave-thread:nth-child(33) b { animation-delay:-5.333s; }
.weave-thread:nth-child(34) { --azimuth:247.5deg; --lift:39.60px; --wave:9.18px; }
.weave-thread:nth-child(34) b { animation-delay:-5.500s; }
.weave-thread:nth-child(35) { --azimuth:255deg; --lift:28.00px; --wave:16.97px; }
.weave-thread:nth-child(35) b { animation-delay:-5.667s; }
.weave-thread:nth-child(36) { --azimuth:262.5deg; --lift:14.49px; --wave:22.17px; }
.weave-thread:nth-child(36) b { animation-delay:-5.833s; }
.weave-thread:nth-child(37) { --azimuth:270deg; --lift:0.00px; --wave:24.00px; }
.weave-thread:nth-child(37) b { animation-delay:-6.000s; }
.weave-thread:nth-child(38) { --azimuth:277.5deg; --lift:-14.49px; --wave:22.17px; }
.weave-thread:nth-child(38) b { animation-delay:-6.167s; }
.weave-thread:nth-child(39) { --azimuth:285deg; --lift:-28.00px; --wave:16.97px; }
.weave-thread:nth-child(39) b { animation-delay:-6.333s; }
.weave-thread:nth-child(40) { --azimuth:292.5deg; --lift:-39.60px; --wave:9.18px; }
.weave-thread:nth-child(40) b { animation-delay:-6.500s; }
.weave-thread:nth-child(41) { --azimuth:300deg; --lift:-48.50px; --wave:0.00px; }
.weave-thread:nth-child(41) b { animation-delay:-6.667s; }
.weave-thread:nth-child(42) { --azimuth:307.5deg; --lift:-54.09px; --wave:-9.18px; }
.weave-thread:nth-child(42) b { animation-delay:-6.833s; }
.weave-thread:nth-child(43) { --azimuth:315deg; --lift:-56.00px; --wave:-16.97px; }
.weave-thread:nth-child(43) b { animation-delay:-7.000s; }
.weave-thread:nth-child(44) { --azimuth:322.5deg; --lift:-54.09px; --wave:-22.17px; }
.weave-thread:nth-child(44) b { animation-delay:-7.167s; }
.weave-thread:nth-child(45) { --azimuth:330deg; --lift:-48.50px; --wave:-24.00px; }
.weave-thread:nth-child(45) b { animation-delay:-7.333s; }
.weave-thread:nth-child(46) { --azimuth:337.5deg; --lift:-39.60px; --wave:-22.17px; }
.weave-thread:nth-child(46) b { animation-delay:-7.500s; }
.weave-thread:nth-child(47) { --azimuth:345deg; --lift:-28.00px; --wave:-16.97px; }
.weave-thread:nth-child(47) b { animation-delay:-7.667s; }
.weave-thread:nth-child(48) { --azimuth:352.5deg; --lift:-14.49px; --wave:-9.18px; }
.weave-thread:nth-child(48) b { animation-delay:-7.833s; }
.weave-latitude:nth-child(1) { width:324.00px; height:324.00px; transform:translate(-50%,-50%) translateZ(0.00px); }
.weave-latitude:nth-child(2) { width:306.43px; height:306.43px; transform:translate(-50%,-50%) translateZ(27.04px); }
.weave-latitude:nth-child(3) { width:260.43px; height:260.43px; transform:translate(-50%,-50%) translateZ(43.75px); }
.weave-latitude:nth-child(4) { width:203.57px; height:203.57px; transform:translate(-50%,-50%) translateZ(43.75px); }
.weave-latitude:nth-child(5) { width:157.57px; height:157.57px; transform:translate(-50%,-50%) translateZ(27.04px); }
.weave-latitude:nth-child(6) { width:140.00px; height:140.00px; transform:translate(-50%,-50%) translateZ(0.00px); }
.weave-latitude:nth-child(7) { width:157.57px; height:157.57px; transform:translate(-50%,-50%) translateZ(-27.04px); }
.weave-latitude:nth-child(8) { width:203.57px; height:203.57px; transform:translate(-50%,-50%) translateZ(-43.75px); }
.weave-latitude:nth-child(9) { width:260.43px; height:260.43px; transform:translate(-50%,-50%) translateZ(-43.75px); }
.weave-latitude:nth-child(10) { width:306.43px; height:306.43px; transform:translate(-50%,-50%) translateZ(-27.04px); }
