/* The owl cast, shared by every page (DS-1, DS-7).
   The block below is the landing page's owl CSS, moved here VERBATIM on
   Sep 27 2026 at Ayat's request to bring the owls into the whole app.
   LOCKED (requirements/08-landing.md LND-24): smoke_local fingerprints it. */
/* OWLS:LOCKED:BEGIN  requirements/08-landing.md LND-18..LND-24. Never edit without Ayat's explicit, specific request (LND-24). */
.owl{--s:64px;width:var(--s);display:inline-block;position:relative;flex:none;cursor:pointer;-webkit-tap-highlight-color:transparent;vertical-align:middle}
.owl-hop{display:block;transform-origin:50% 100%}
.owl-tilt{display:block;transition:transform .7s cubic-bezier(.3,1.4,.5,1);transform:rotate(var(--tilt,0deg));transform-origin:50% 85%}
.owl-svg{display:block;width:100%;height:auto;overflow:visible;animation:bob 2.8s ease-in-out infinite;animation-delay:var(--d,0s)}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-3.5%)}}
.o-lid{transform-box:fill-box;transform-origin:50% 0;transform:scaleY(0);transition:transform .09s ease-in}
.owl.blink .o-lid{transform:scaleY(1)}
.owl.sleepy .o-lid{transform:scaleY(.5)}
.owl.sleepy.blink .o-lid{transform:scaleY(1)}
.o-look{transform:translate(var(--lx,0px),var(--ly,0px));transition:transform .35s var(--ease)}
.o-happy{opacity:0;transition:opacity .15s}
.o-eye{transition:opacity .15s}
.owl.happy .o-eye{opacity:0}
.owl.happy .o-happy{opacity:1}
.o-tufts{transform-box:fill-box;transform-origin:50% 100%;transition:transform .25s var(--ease)}
.owl:hover .o-tufts{transform:translateY(-3px) scaleY(1.1)}
.owl.hop .owl-hop{animation:hop .45s cubic-bezier(.3,1.5,.5,1)}
.owl.happy .owl-hop{animation:hop .5s cubic-bezier(.3,1.5,.5,1) 2}
@keyframes hop{0%{transform:none}20%{transform:scale(1.08,.9)}55%{transform:translateY(-16%) scale(.95,1.06)}82%{transform:scale(1.05,.95)}100%{transform:none}}
.o-wing-l,.o-wing-r{transform-box:fill-box;transition:transform .2s}
.o-wing-l{transform-origin:90% 8%}
.o-wing-r{transform-origin:10% 8%}
.owl.happy .o-wing-l{animation:flapL .16s ease-in-out 8 alternate}
.owl.happy .o-wing-r{animation:flapR .16s ease-in-out 8 alternate}
@keyframes flapL{to{transform:rotate(26deg)}}
@keyframes flapR{to{transform:rotate(-26deg)}}
.owl.oops{--tilt:10deg}
.owl.oops .o-lid{transform:scaleY(.45)}
.owl.oops .o-tufts{transform:scaleY(.55) translateY(2px)}
.o-prop{transform-box:fill-box;transform-origin:40% 70%}
.owl.working .o-prop{animation:scrib .32s ease-in-out infinite alternate}
.owl[data-prop="brush"].working .o-prop{animation:brush .5s ease-in-out infinite alternate}
.owl[data-prop="camera"].working .o-prop{animation:none}
@keyframes scrib{from{transform:translate(-3px,1px) rotate(-6deg)}to{transform:translate(3px,-1px) rotate(5deg)}}
@keyframes brush{from{transform:rotate(-12deg)}to{transform:rotate(12deg) translateY(-2px)}}
.o-burst{opacity:0}
.owl.working .o-burst,.owl.flash .o-burst{animation:burst 1.1s ease-out infinite}
.owl.flash .o-burst{animation-iteration-count:1}
@keyframes burst{0%{opacity:0;transform:scale(.3)}10%{opacity:1}60%{opacity:0;transform:scale(1.6)}100%{opacity:0}}
.o-burst{transform-box:fill-box;transform-origin:50% 50%}
.o-waves path{animation:wave 1.6s ease-out infinite}
.o-waves path:nth-child(2){animation-delay:.3s}
@keyframes wave{0%{opacity:0}30%{opacity:1}100%{opacity:0}}
.owl.peek .owl-hop{animation:peek .8s cubic-bezier(.3,1.4,.5,1)}
@keyframes peek{from{transform:translateY(30%)}to{transform:none}}
.o-z{animation:zz 2.4s ease-in-out infinite}
@keyframes zz{0%{opacity:0;transform:translate(0,4px)}40%{opacity:1}100%{opacity:0;transform:translate(6px,-8px)}}
/* OWLS:LOCKED:END */
