/* ===== Freedom circles =====
   Every scene is authored in its FINAL state; keyframes animate toward/away from it,
   so removing animation (reduced motion) yields a complete static picture. */

/* shared frame: circular, gold double ring, 1:1 at every width */
.fr-art{position:relative;width:min(100%,400px);aspect-ratio:1/1;margin:10px auto 0;border-radius:50%;overflow:hidden;isolation:isolate;
  background:radial-gradient(120% 90% at 50% 100%,#1F3428 0%,#162419 60%,#0F1B14 100%);
  border:1px solid rgba(201,162,39,.6);
  box-shadow:0 0 0 7px var(--bg2),0 0 0 8px rgba(201,162,39,.28),0 26px 48px -22px rgba(0,0,0,.55);}
.fr-art svg{position:absolute;inset:0;width:100%;height:100%;display:block;}
.fr-art *{transform-box:fill-box;transform-origin:center;}
.fr-art::after{content:'';position:absolute;inset:0;border-radius:50%;background:linear-gradient(105deg,transparent 40%,rgba(237,217,122,.1) 50%,transparent 60%);transform:translateX(-120%);transition:transform 1.1s ease;pointer-events:none;}
.fr-card:hover .fr-art::after,.fr-card:focus-within .fr-art::after{transform:translateX(120%);}
.fr-art .zoom{transition:transform .9s cubic-bezier(.16,1,.3,1);transform-origin:50% 50%;}
.fr-card:hover .zoom{transform:scale(1.04);}
.fr-art .ln{fill:none;stroke:#C9A227;stroke-linecap:round;stroke-linejoin:round;}
.fr-art .gem{fill:#EDD97A;}
.fr-art .sp{fill:#EDD97A;animation:frTw 4s ease-in-out infinite;}
.fr-art .sp:nth-of-type(2n){animation-delay:1.1s}.fr-art .sp:nth-of-type(3n){animation-delay:2.2s}
.fr-dash{animation:frSpin 140s linear infinite;}
.fr-gems .gem{animation:frGem 6s ease-in-out infinite;}
.fr-gems .g2{animation-delay:1.5s}.fr-gems .g3{animation-delay:3s}.fr-gems .g4{animation-delay:4.5s}
@keyframes frTw{0%,100%{opacity:0;transform:scale(.3)}50%{opacity:.95;transform:scale(1)}}
@keyframes frSpin{to{transform:rotate(360deg)}}
@keyframes frGem{0%,100%{opacity:.45;transform:scale(.8)}12%{opacity:1;transform:scale(1.5)}30%{opacity:.6;transform:scale(1)}}

/* ===== TIME: one 24s "day" — sun crosses, hour hand turns once, minute hand four times, horizon glow breathes ===== */
.t-stars circle{animation:frTw 4.5s ease-in-out infinite}.t-stars circle:nth-child(2n){animation-delay:1.6s}.t-stars circle:nth-child(3n){animation-delay:3s}
.t-sun{offset-path:path('M40 300A160 160 0 0 1 360 300');offset-rotate:0deg;offset-distance:50%;animation:tDay 24s linear infinite;}
@keyframes tDay{from{offset-distance:0%}to{offset-distance:100%}}
.t-halo{animation:tHalo 6s ease-in-out infinite}
@keyframes tHalo{0%,100%{transform:scale(.9);opacity:.08}50%{transform:scale(1.2);opacity:.2}}
.t-sunring{animation:frSpin 40s linear infinite}
.t-glow{opacity:.7;animation:tGlow 24s ease-in-out infinite}
@keyframes tGlow{0%,100%{opacity:.95}50%{opacity:.3}}
.t-hour{transform-origin:50% 100%;transform:rotate(50deg);animation:frSpin 24s linear infinite}
.t-min{transform-origin:50% 100%;transform:rotate(180deg);animation:frSpin 6s linear infinite}
.t-ring{stroke-dasharray:2 7;animation:frSpin 90s linear infinite reverse}
.t-arc{animation:tDash 8s linear infinite}
@keyframes tDash{to{stroke-dashoffset:-36}}
.t-mist{animation:tMist 18s ease-in-out infinite alternate}.t-mist.b{animation-duration:26s;animation-direction:alternate-reverse}
@keyframes tMist{from{transform:translateX(-22px)}to{transform:translateX(22px)}}
.t-snow{animation:tSnow 24s ease-in-out infinite}
@keyframes tSnow{0%,100%{opacity:.25}50%{opacity:.7}}
.t-lamp{transform-origin:50% 100%;animation:tLamp 3.2s ease-in-out infinite}
@keyframes tLamp{0%,100%{opacity:.6;transform:scale(.9)}45%{opacity:1;transform:scale(1.1)}70%{opacity:.75;transform:scale(1)}}
.t-shim{animation:tShim 7s ease-in-out infinite alternate}
@keyframes tShim{from{transform:translateX(-10px);opacity:.5}to{transform:translateX(10px);opacity:1}}

/* ===== LOCATION: slowly turning globe (freedom-scene.js drives projection + flights on a 24s loop; markup is a complete still) ===== */
.fr-art .l-js{transform-box:view-box;transform-origin:0 0;}
.l-rf1,.l-rf2{animation:tDash 8s linear infinite}

/* ===== FINANCIAL: one 20s money-tree loop, three growing harvests, then a soft reset =====
   Sapling 0-1.7s; first pile 4.2-5.3s; larger harvests repeat at 5s intervals.
   The complete pile holds from 15.3s through 18.3s before the soft reset. */
.fr-fin *{transform-box:view-box;transform-origin:0 0;}
.fr-fin .sp{transform-box:fill-box;transform-origin:center;}
.fr-fin .f-bl,.fr-fin .f-n{transform-box:fill-box;transform-origin:center;}
.fr-fin .f-tree{transform-origin:200px 330px;animation:fTree 20s linear infinite both}
.fr-fin .f-p{transform-origin:200px 326px}
.fr-fin .f-p1{animation:fP1 20s linear infinite both}.fr-fin .f-p2{animation:fP2 20s linear infinite both}.fr-fin .f-p3{animation:fP3 20s linear infinite both}
.fr-fin .f-bl{animation:fBl 20s linear infinite both}
.fr-fin .f-n{opacity:0}
.fr-fin .f-n1{animation:fN1 20s linear infinite both}.fr-fin .f-n2{animation:fN2 20s linear infinite both}.fr-fin .f-n3{animation:fN3 20s linear infinite both}
@keyframes fTree{0%{transform:scale(.04);opacity:0;animation-timing-function:cubic-bezier(.2,.8,.3,1)}1.5%{opacity:1}8.3%{transform:scale(.56)}25%{transform:scale(.56);animation-timing-function:cubic-bezier(.2,.8,.3,1)}33.3%{transform:scale(.78)}50%{transform:scale(.78);animation-timing-function:cubic-bezier(.2,.8,.3,1)}58.3%{transform:scale(1)}91.7%{transform:scale(1);opacity:1}97%{transform:scale(1);opacity:0}100%{transform:scale(.04);opacity:0}}
@keyframes fBl{0%,8.3%{transform:scale(0);opacity:0}11.5%{transform:scale(1);opacity:1}13.9%{transform:scale(1);opacity:1}15%{transform:scale(1.35);opacity:0}33.3%{transform:scale(0);opacity:0}36.1%{transform:scale(1);opacity:1}38.9%{transform:scale(1);opacity:1}40%{transform:scale(1.35);opacity:0}58.3%{transform:scale(0);opacity:0}61.1%{transform:scale(1);opacity:1}63.9%{transform:scale(1);opacity:1}65%{transform:scale(1.35);opacity:0}100%{transform:scale(0);opacity:0}}
@keyframes fP1{0%,20.8%{opacity:0;transform:scale(.55)}26.4%{opacity:1;transform:scale(1)}91.7%{opacity:1;transform:scale(1)}97%,100%{opacity:0;transform:scale(1)}}
@keyframes fP2{0%,45.8%{opacity:0;transform:scale(.55)}51.4%{opacity:1;transform:scale(1)}91.7%{opacity:1;transform:scale(1)}97%,100%{opacity:0;transform:scale(1)}}
@keyframes fP3{0%,70.8%{opacity:0;transform:scale(.55)}76.4%{opacity:1;transform:scale(1)}91.7%{opacity:1;transform:scale(1)}97%,100%{opacity:0;transform:scale(1)}}
@keyframes fN1{0%{opacity:0}12.5%{opacity:0;transform:translate(0,0) rotate(0deg) scale(.2)}14.5%{opacity:1;transform:translate(0,0) rotate(0deg) scale(1)}15.3%{opacity:1;transform:translate(0,0) rotate(0deg) scale(1);animation-timing-function:ease-in-out}17.5%{transform:translate(calc(var(--dx)*.2 + var(--sw)),calc(var(--dy)*.2)) rotate(calc(var(--rr)*.3 + 28deg)) scale(1);animation-timing-function:ease-in-out}19.7%{transform:translate(calc(var(--dx)*.45 - var(--sw)*.8),calc(var(--dy)*.46)) rotate(calc(var(--rr)*.6 - 24deg)) scale(1);animation-timing-function:ease-in-out}21.9%{transform:translate(calc(var(--dx)*.75 + var(--sw)*.4),calc(var(--dy)*.74)) rotate(calc(var(--rr)*.85 + 20deg)) scale(1);animation-timing-function:ease-in}24%{opacity:1;transform:translate(var(--dx),var(--dy)) rotate(var(--rr)) scale(1)}25.5%{opacity:1;transform:translate(var(--dx),var(--dy)) rotate(var(--rr)) scale(1)}26.6%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(var(--rr)) scale(.9)}100%{opacity:0}}
@keyframes fN2{0%{opacity:0}37.5%{opacity:0;transform:translate(0,0) rotate(0deg) scale(.2)}39.5%{opacity:1;transform:translate(0,0) rotate(0deg) scale(1)}40.3%{opacity:1;transform:translate(0,0) rotate(0deg) scale(1);animation-timing-function:ease-in-out}42.5%{transform:translate(calc(var(--dx)*.2 + var(--sw)),calc(var(--dy)*.2)) rotate(calc(var(--rr)*.3 + 28deg)) scale(1);animation-timing-function:ease-in-out}44.7%{transform:translate(calc(var(--dx)*.45 - var(--sw)*.8),calc(var(--dy)*.46)) rotate(calc(var(--rr)*.6 - 24deg)) scale(1);animation-timing-function:ease-in-out}46.9%{transform:translate(calc(var(--dx)*.75 + var(--sw)*.4),calc(var(--dy)*.74)) rotate(calc(var(--rr)*.85 + 20deg)) scale(1);animation-timing-function:ease-in}49%{opacity:1;transform:translate(var(--dx),var(--dy)) rotate(var(--rr)) scale(1)}50.5%{opacity:1;transform:translate(var(--dx),var(--dy)) rotate(var(--rr)) scale(1)}51.6%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(var(--rr)) scale(.9)}100%{opacity:0}}
@keyframes fN3{0%{opacity:0}62.5%{opacity:0;transform:translate(0,0) rotate(0deg) scale(.2)}64.5%{opacity:1;transform:translate(0,0) rotate(0deg) scale(1)}65.3%{opacity:1;transform:translate(0,0) rotate(0deg) scale(1);animation-timing-function:ease-in-out}67.5%{transform:translate(calc(var(--dx)*.2 + var(--sw)),calc(var(--dy)*.2)) rotate(calc(var(--rr)*.3 + 28deg)) scale(1);animation-timing-function:ease-in-out}69.7%{transform:translate(calc(var(--dx)*.45 - var(--sw)*.8),calc(var(--dy)*.46)) rotate(calc(var(--rr)*.6 - 24deg)) scale(1);animation-timing-function:ease-in-out}71.9%{transform:translate(calc(var(--dx)*.75 + var(--sw)*.4),calc(var(--dy)*.74)) rotate(calc(var(--rr)*.85 + 20deg)) scale(1);animation-timing-function:ease-in}74%{opacity:1;transform:translate(var(--dx),var(--dy)) rotate(var(--rr)) scale(1)}75.5%{opacity:1;transform:translate(var(--dx),var(--dy)) rotate(var(--rr)) scale(1)}76.6%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(var(--rr)) scale(.9)}100%{opacity:0}}

/* ===== reduced motion: complete static scenes ===== */
@media(prefers-reduced-motion:reduce){
  .fr-art *{animation:none!important;transition:none!important;}
  .fr-art::after{display:none;}
  .fr-card:hover .zoom{transform:none;}
  .fr-art .sp{opacity:.8;transform:none}
  .fr-gems .gem{opacity:.9}
  .t-hour,.t-min{transform-origin:50% 100%}
  .t-halo{opacity:.5}
  .fr-fin .f-tree,.fr-fin .f-p,.fr-fin .f-bl{opacity:1;transform:none}
  .fr-fin .f-n{opacity:0}
}
