/* CIPHR footer: a lime pixel-static field that glows, a slow scanline sweep, a pulsing keyhole
   and a terminal link grid. Loaded last. Motion is transform, opacity and canvas only; it runs
   while the footer is on screen (js/ciphr-footer.js adds .cf-live) and stops under reduced motion. */
.cf-foot{--cf-glow:rgba(142,227,3,1);--cf-glow-soft:rgba(142,227,3,.22);--cf-panel:rgba(11,13,12,.9);--cf-expo:cubic-bezier(.16,1,.3,1);--cf-expo-io:cubic-bezier(.87,0,.13,1);position:relative;isolation:isolate;overflow:hidden}
.cf-static{position:absolute;inset:0;z-index:-3;width:100%;height:100%;display:block;image-rendering:pixelated;pointer-events:none}
.cf-glow{position:absolute;inset:auto 0 0;z-index:-2;height:78%;pointer-events:none;background:radial-gradient(60% 70% at 50% 100%,var(--cf-glow-soft),transparent 72%);opacity:.7}
.cf-scan{position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(to bottom,transparent calc(100% - 180px),rgba(142,227,3,.05) calc(100% - 60px),rgba(142,227,3,.28) calc(100% - 2px),rgba(200,255,120,.55) calc(100% - 1px),transparent);transform:translateY(-100%)}
/* fixed scanline texture over the whole field, static */
.cf-foot::after{content:'';position:absolute;inset:0;z-index:-1;pointer-events:none;background:repeating-linear-gradient(to bottom,rgba(0,0,0,.22) 0 1px,transparent 1px 3px)}
.cf-live .cf-scan{animation:cf-sweep 9s var(--cf-expo-io) infinite}
.cf-live .cf-glow{animation:cf-breathe 6s var(--cf-expo-io) infinite alternate}
@keyframes cf-sweep{0%{transform:translateY(-100%)}70%,100%{transform:translateY(4%)}}
@keyframes cf-breathe{from{opacity:.55}to{opacity:1}}

/* keyhole mark */
.cf-lock{position:relative;flex:0 0 auto;display:grid;place-items:center;width:64px;height:64px;pointer-events:none}
.cf-lock::before,.cf-lock::after{content:'';position:absolute;inset:6px;border-radius:50%;border:1px solid rgba(142,227,3,.55);box-shadow:0 0 18px var(--cf-glow-soft),inset 0 0 12px var(--cf-glow-soft);opacity:.5}
.cf-lock::after{opacity:0}
.cf-lock svg{position:relative;width:26px;height:34px;fill:var(--cf-glow);filter:drop-shadow(0 0 6px rgba(142,227,3,.7))}
.cf-live .cf-lock::after{animation:cf-ring 2.8s var(--cf-expo) infinite}
.cf-live .cf-lock svg{animation:cf-key 2.8s var(--cf-expo) infinite}
@keyframes cf-ring{0%{transform:scale(.7);opacity:.9}100%{transform:scale(1.6);opacity:0}}
@keyframes cf-key{0%{opacity:1}60%,100%{opacity:.62}}

/* blinking block cursor */
.cf-cursor{display:inline-block;width:.62em;height:1.05em;margin-left:.3em;vertical-align:-.16em;background:var(--cf-glow);box-shadow:0 0 10px rgba(142,227,3,.6)}
.cf-live .cf-cursor{animation:cf-blink 1.1s steps(1,end) infinite}
@keyframes cf-blink{0%{opacity:1}50%{opacity:0}}

/* home and machine footer */
.site-foot.full-footer.cf-foot{background:var(--ground);color:var(--ink);border-top:1px solid rgba(142,227,3,.4);box-shadow:0 -1px 28px rgba(142,227,3,.16)}
.cf-foot .footer-top{position:relative}
.cf-foot .footer-brand .nav-wordmark{color:var(--ink)}
.cf-foot .footer-brand p{color:var(--ink-soft);font-family:var(--font-mono);font-size:14px}
.cf-foot .footer-actions .btn{background:var(--glow);color:var(--ground);border-color:var(--glow);box-shadow:0 0 24px rgba(142,227,3,.3)}
.cf-foot .footer-actions .btn-ghost{background:var(--cf-panel);color:var(--ink);border-color:rgba(233,242,237,.4);box-shadow:none}
.cf-foot .footer-rail::before{background:var(--line)}
.cf-foot .footer-hook{stroke:var(--ink-soft)}
.cf-foot .slider-controls .slider-arrow{background:var(--cf-panel);color:var(--ink);border-color:var(--line)}

.site-foot.full-footer.cf-foot{--cf-gap:40px;row-gap:var(--cf-gap)}
.cf-foot .cf-prompt+.footer-columns{margin-top:calc(12px - var(--cf-gap))}
.cf-foot .cf-prompt{height:1.4em;margin:0;font:400 13px/1.4 var(--font-mono);letter-spacing:.02em;color:var(--ink-soft)}
.cf-prompt b{font-weight:400;color:var(--accent)}
.cf-foot .footer-columns{gap:0;border:1px solid var(--line);background:var(--cf-panel)}
.cf-foot .footer-links{padding:20px 24px 16px;border-left:1px solid var(--line)}
.cf-foot .footer-links:first-child{border-left:0}
.cf-foot .footer-links summary{font:500 13px/1.4 var(--font-mono);letter-spacing:.04em;text-transform:lowercase;color:var(--accent)}
.cf-foot .footer-links summary::before{content:'./';color:var(--ink-soft)}
.cf-foot .footer-link-list{padding-top:0;counter-reset:cf-link}
.cf-foot .footer-links a{color:var(--ink);font:400 14px/1.5 var(--font-mono);counter-increment:cf-link}
.cf-foot .footer-links a::before{content:counter(cf-link,decimal-leading-zero);flex:0 0 auto;width:3ch;margin-right:.9ch;color:var(--ink-soft);opacity:.7}
.cf-foot .footer-links a::after{content:'';flex:0 0 auto;width:.6em;height:1.05em;margin-left:.4ch;background:var(--cf-glow);opacity:0}
.cf-foot .footer-links a span::after{display:none}
.cf-foot .footer-links a:hover,.cf-foot .footer-links a:focus-visible{color:var(--accent)}
.cf-foot .footer-links a:hover::after,.cf-foot .footer-links a:focus-visible::after{opacity:1;animation:cf-blink 1.1s steps(1,end) infinite}
.cf-foot .footer-links a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

.cf-foot .footer-bottom{padding:12px 12px 12px 20px;border:1px solid var(--line);background:var(--cf-panel);font-family:var(--font-mono);color:var(--ink-soft)}
.cf-foot .footer-bottom p{color:var(--ink-soft)}
.cf-foot .footer-bottom .back-top{color:var(--ink);border-color:var(--line);background:var(--cf-panel)}
.cf-foot .footer-bottom .back-top:hover,.cf-foot .footer-bottom .back-top:focus-visible{border-color:var(--accent);color:var(--accent)}
.cf-foot .footer-monument{color:transparent;-webkit-text-stroke:1px rgba(142,227,3,.4)}

@media(min-width:768px){.site-foot.full-footer.cf-foot{--cf-gap:48px}}
@media(min-width:1440px){.site-foot.full-footer.cf-foot{--cf-gap:56px}}
@media(min-width:1920px){.site-foot.full-footer.cf-foot{--cf-gap:64px}}
@media(max-width:1023px){
 .cf-foot .footer-top>.cf-lock{position:absolute;top:0;right:0}
 .cf-foot .footer-links:nth-child(odd){border-left:0}
 .cf-foot .footer-links:nth-child(n+3){border-top:1px solid var(--line)}
}
@media(max-width:600px){
 .cf-foot .footer-top>.cf-lock{width:52px;height:52px}
 .site-foot.full-footer.cf-foot{--cf-gap:32px}
 .cf-foot .footer-links{padding:0 16px;border-left:0}
 .cf-foot .footer-links:first-child{border-top:0}
 .cf-foot .footer-links:nth-child(n+2){border-top:1px solid var(--line)}
 .cf-foot .footer-link-list{padding-bottom:12px}
}

/* docs footer */
.docs-foot.cf-foot{max-width:none;align-items:center;margin-top:var(--space-48);padding-inline:max(var(--gutter,24px),calc((100% - 1180px)/2 + var(--gutter,24px)));padding-top:var(--space-32);background:var(--ground);color:var(--ink-soft);border-top:1px solid rgba(142,227,3,.4);box-shadow:0 -1px 28px rgba(142,227,3,.16);font-family:var(--font-mono)}
.docs-foot.cf-foot .cf-lock{width:52px;height:52px;margin-right:auto}
.docs-foot.cf-foot p{position:relative}

@media(prefers-reduced-motion:reduce){
 .cf-live .cf-scan,.cf-live .cf-glow,.cf-live .cf-lock::after,.cf-live .cf-lock svg,.cf-live .cf-cursor,.cf-foot .footer-links a:hover::after,.cf-foot .footer-links a:focus-visible::after{animation:none}
 .cf-scan{opacity:0}
}
