/* Sunquick BiBi - Children's Day juice factory
   Laid out on a fixed 1080 x 1920 design canvas; #stage is scaled to fit.

   Motion rule: anything that moves is animated with transform/opacity only,
   so it composites on the GPU. Position changes commit to left/top instantly
   and the travel is done with an additive transform (see util.js glide). */

@font-face{font-family:Baloo;src:url(../assets/fonts/baloo2.woff2) format('woff2');
  font-weight:400 800;font-display:swap}
@font-face{font-family:Nunito;src:url(../assets/fonts/nunito.woff2) format('woff2');
  font-weight:400 900;font-display:swap}

:root{
  --navy:#03216E; --navy2:#16255A; --sky:#44B8F5; --sky2:#8FD8FF;
  --orange:#F58220; --gold:#F8B923; --mango:#E8B92B; --apple:#8DAB1A; --leaf:#1A910D;
  --ink:#03216E;
  --shadow:0 12px 0 rgba(3,33,110,.16), 0 22px 44px rgba(3,33,110,.26);
  --lift:0 26px 46px rgba(3,33,110,.34);
  --e-out:cubic-bezier(.22,1,.36,1);
  --e-spring:cubic-bezier(.34,1.56,.64,1);
  --e-pop:cubic-bezier(.18,1.75,.42,1);
}

*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
[hidden]{display:none!important}

html,body{height:100%;overflow:hidden;background:#06123A;
  font-family:Nunito,system-ui,sans-serif;color:var(--ink);
  user-select:none;-webkit-user-select:none;touch-action:manipulation}
body.nocursor,body.nocursor *{cursor:none!important}

/* ---------- stage ------------------------------------------------------ */
#stage{position:absolute;left:50%;top:50%;width:1080px;height:1920px;
  transform:translate(-50%,-50%) scale(1);overflow:hidden;
  border-radius:4px;box-shadow:0 0 80px rgba(0,0,0,.6);
  background:linear-gradient(#5FC6FA,#D8F2FD)}

#screen,#fx{position:absolute;inset:0}
#fx{pointer-events:none;z-index:70}

/* full-canvas scenery, behind everything in the screen */
.backdrop{position:absolute;inset:0;width:100%;height:100%;z-index:0;
  pointer-events:none;animation:fadein .5s ease both}
@keyframes fadein{from{opacity:0}to{opacity:1}}
.bd-sun{transform-origin:900px 250px;animation:spin 60s linear infinite}

.sprite{position:absolute;translate:-50% -50%;display:block}
.sprite .art,.sprite>img{width:100%;height:100%;display:block}

/* ---------- top bar ---------------------------------------------------- */
#topbar{position:absolute;left:0;top:0;width:100%;height:132px;z-index:40;
  display:flex;align-items:center;gap:24px;padding:0 36px 0 150px;
  animation:dropin .5s var(--e-out) both}
@keyframes dropin{from{transform:translateY(-100%);opacity:0}to{transform:none;opacity:1}}
#topbar .brand{height:72px;width:auto;filter:drop-shadow(0 4px 6px rgba(3,33,110,.25))}
#steps{display:flex;gap:10px;margin-left:auto}
.dot{display:flex;flex-direction:column;align-items:center;gap:6px;width:92px}
.dot b{width:26px;height:26px;border-radius:50%;background:rgba(3,33,110,.18);display:block;
  transition:background .3s,box-shadow .3s,transform .4s var(--e-spring)}
.dot em{font:700 20px Nunito;font-style:normal;color:rgba(3,33,110,.45);letter-spacing:.3px;
  transition:color .3s}
.dot.now b{background:var(--orange);box-shadow:0 0 0 8px rgba(245,130,32,.22);
  transform:scale(1.25);animation:beat 1.5s ease-in-out infinite}
@keyframes beat{0%,100%{box-shadow:0 0 0 8px rgba(245,130,32,.22)}
  50%{box-shadow:0 0 0 15px rgba(245,130,32,.05)}}
.dot.now em{color:var(--navy)}
.dot.done b{background:var(--apple)}
.dot.done em{color:rgba(3,33,110,.7)}

.netdot{position:absolute;right:10px;top:10px;width:14px;height:14px;border-radius:50%;
  background:transparent}
.netdot.pending{background:var(--orange);box-shadow:0 0 0 4px rgba(245,130,32,.25)}

#corner{position:absolute;left:0;top:0;width:110px;height:110px;z-index:90;
  background:transparent;border:0;cursor:default}

/* ---------- prompt banner ---------------------------------------------- */
#prompt{position:absolute;left:50%;translate:-50% 0;top:152px;z-index:35;
  width:940px;padding:22px 54px;border-radius:70px;text-align:center;
  background:#fff;color:var(--navy);font:700 46px/1.18 Baloo;
  box-shadow:var(--shadow)}
#prompt b{color:var(--orange)}
#prompt.pop{animation:promptpop .5s var(--e-pop)}
@keyframes promptpop{0%{transform:scale(.9) translateY(-10px)}
  55%{transform:scale(1.035)}100%{transform:scale(1)}}

/* ---------- buttons ----------------------------------------------------- */
.big-btn{position:absolute;left:50%;translate:-50% 0;bottom:150px;
  padding:34px 86px;border:0;border-radius:80px;cursor:pointer;white-space:nowrap;
  font:800 58px Baloo;letter-spacing:1px;color:#fff;
  background:linear-gradient(#FFA941,var(--orange));
  box-shadow:0 12px 0 #C85F08,0 26px 44px rgba(3,33,110,.3);
  transition:transform .12s var(--e-out),box-shadow .12s}
.big-btn::after{content:'';position:absolute;inset:6px 22px auto;height:30%;
  border-radius:60px;background:rgba(255,255,255,.3);pointer-events:none}
.big-btn:active{transform:translateY(9px) scale(.99);box-shadow:0 3px 0 #C85F08}
.big-btn:disabled{background:linear-gradient(#C9D2E2,#A9B5CA);box-shadow:0 12px 0 #8E9AB0;
  cursor:default;color:#EEF2F8;transform:none}
.big-btn.pulse{animation:btnpulse 1.6s ease-in-out infinite}
@keyframes btnpulse{0%,100%{transform:translateY(0) scale(1)}
  50%{transform:translateY(-12px) scale(1.04)}}
.big-btn.small{position:static;translate:none;display:block;margin:38px auto 0;
  padding:24px 72px;font-size:44px}
.big-btn.go{bottom:120px}

/* ---------- attract ----------------------------------------------------- */
.attract-logo{position:absolute;left:50%;translate:-50% 0;top:240px;width:950px;z-index:2}
/* The brand lockup is never animated, moved, scaled or distorted - logo
   policy. It only fades in, at its correct size and proportions. */
.attract-logo img{width:100%;display:block;animation:fadein .6s ease both}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-18px)}}
.attract-sub{position:absolute;left:50%;translate:-50% 0;top:980px;width:100%;z-index:2;
  text-align:center;color:var(--navy);animation:risein .7s .35s var(--e-out) both}
@keyframes risein{from{transform:translateY(34px);opacity:0}to{transform:none;opacity:1}}
.attract-sub span{display:block;font:600 44px Nunito;opacity:.85}
.attract-sub strong{display:block;font:800 76px Baloo;color:var(--navy);
  text-shadow:0 4px 0 rgba(255,255,255,.8)}
.float-fruit{z-index:2;animation:floaty 5s ease-in-out infinite;
  filter:drop-shadow(0 12px 14px rgba(3,33,110,.22))}
@keyframes floaty{0%,100%{transform:translateY(0) rotate(-7deg)}
  50%{transform:translateY(-40px) rotate(9deg)}}

/* ---------- register ---------------------------------------------------- */
.field{position:absolute;left:90px;width:900px;z-index:2;
  animation:risein .55s var(--e-out) both}
.field:nth-of-type(2){animation-delay:.1s}
/* labels, placeholder and the typed value all centre on the field */
.field label{display:block;font:700 34px Nunito;color:var(--navy);
  margin:0 0 10px;text-align:center;opacity:.9}
.field .box{position:relative;height:122px;border-radius:30px;background:#fff;
  border:6px solid #C8DDF2;display:flex;align-items:center;justify-content:center;
  padding:0 34px;font:700 56px Baloo;color:var(--navy);overflow:hidden;
  box-shadow:var(--shadow);transition:border-color .25s,box-shadow .25s,transform .25s var(--e-out)}
.field.active .box{border-color:var(--orange);transform:scale(1.015);
  box-shadow:0 12px 0 rgba(245,130,32,.18),0 22px 44px rgba(3,33,110,.26)}
.field .hint{position:absolute;left:0;right:0;text-align:center;
  color:#9FB2CC;font:600 38px Nunito}
.field.filled .hint,.field.active .hint{display:none}
.field .caret{width:5px;height:58px;background:var(--orange);margin-left:4px;opacity:0;
  border-radius:3px}
.field.active .caret{animation:blink 1.05s step-end infinite}
@keyframes blink{50%{opacity:1}}

.keyboard{position:absolute;left:50%;translate:-50% 0;top:712px;width:1000px;z-index:2;
  display:flex;flex-direction:column;gap:14px;align-items:center;
  animation:risein .45s .18s var(--e-out) both}
.krow{display:flex;gap:12px;justify-content:center;width:100%}
.key{min-width:88px;height:106px;padding:0 10px;border:0;border-radius:22px;
  background:#fff;color:var(--navy);font:800 42px Baloo;cursor:pointer;
  box-shadow:0 7px 0 #B9CBE2;transition:transform .08s,box-shadow .08s,background .12s}
.key.hit{transform:translateY(6px) scale(.96);box-shadow:0 1px 0 #B9CBE2;background:#FFEBD2}
.key.wide{min-width:150px}
.key.space{min-width:520px}
.key.del{background:#FFE2E2;box-shadow:0 7px 0 #E0A8A8}
.key.ok{background:#D8F3C8;box-shadow:0 7px 0 #A4CE8C;color:#2E6B14}
.keyboard.numpad{width:640px}
.keyboard.numpad .key{min-width:180px;height:132px;font-size:56px}

/* ---------- flavour cards ------------------------------------------------ */
.tree-card{position:absolute;top:320px;width:460px;height:1210px;border:0;
  border-radius:52px;background:#fff;cursor:pointer;padding:0;overflow:hidden;
  box-shadow:var(--shadow);
  transition:transform .35s var(--e-spring),opacity .35s,box-shadow .35s;
  animation:cardin .6s var(--e-pop) both}
.tree-card:nth-of-type(2){animation-delay:.12s}
@keyframes cardin{from{transform:translateY(90px) scale(.9);opacity:0}
  to{transform:none;opacity:1}}
.tree-card:active{transform:scale(.97)}
.tree-card .tc-tree{height:690px;display:flex;align-items:flex-end;justify-content:center;
  background:linear-gradient(#DDF2FE 0%,#D7F0DD 64%,#9BD977 78%,#7FCB5B 100%);overflow:hidden}
.tree-card .tc-tree svg{width:126%;height:auto;margin-bottom:-42px;
  animation:sway 5s ease-in-out infinite;transform-origin:50% 94%}
@keyframes sway{0%,100%{transform:rotate(-1.4deg)}50%{transform:rotate(1.4deg)}}
.tree-card .tc-name{font:800 58px Baloo;color:var(--navy);padding:26px 0 6px}
.tree-card .tc-pack{height:340px;width:auto;display:block;margin:0 auto;
  filter:drop-shadow(0 14px 20px rgba(3,33,110,.28))}
.tree-card.chosen{transform:scale(1.05);box-shadow:0 0 0 10px var(--gold),var(--lift)}
.tree-card.fade{opacity:0;transform:scale(.86) translateY(40px)}

/* ---------- scene pieces -------------------------------------------------- */
.tree-wrap{z-index:3;transform-origin:50% 94%;
  animation:treein .7s var(--e-pop) both, sway 6s ease-in-out .7s infinite}
@keyframes treein{from{transform:scale(.55) translateY(90px);opacity:0}
  to{transform:scale(1) translateY(0);opacity:1}}
.tree-wrap.vanish{animation:none;transition:transform .55s var(--e-out),opacity .55s;
  transform:translateY(-70px) scale(.62);opacity:0}

.conveyor{z-index:4;animation:risein .55s var(--e-out) both}
.conveyor.running .roller{animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.conveyor.running::after{content:'';position:absolute;left:5.4%;top:22.6%;
  width:89.2%;height:34.8%;border-radius:40px;pointer-events:none;
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.18) 0 14px,
    transparent 14px 48px);
  animation:belt .6s linear infinite}
@keyframes belt{to{background-position-x:48px}}

.basket{z-index:5;filter:drop-shadow(0 10px 12px rgba(3,33,110,.2))}
.basket.idle{animation:bob 2.6s ease-in-out infinite}
.basket-tag{font:700 26px Nunito;fill:#5A3510;text-anchor:middle;text-transform:uppercase;
  letter-spacing:2px;opacity:.75}

.fruit{z-index:8;cursor:grab;will-change:transform;
  filter:drop-shadow(0 8px 10px rgba(3,33,110,.22))}
.fruit.grow{animation:fruitpop .55s var(--e-pop) both, hang 3.2s ease-in-out 1s infinite}
@keyframes fruitpop{0%{transform:scale(0) rotate(-40deg)}
  70%{transform:scale(1.12) rotate(6deg)}100%{transform:scale(1) rotate(0)}}
@keyframes hang{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}
.drag{will-change:transform}
.drag.dragging{cursor:grabbing;z-index:30;animation:none;
  filter:drop-shadow(0 26px 22px rgba(3,33,110,.34));transform:scale(1.14)}
.fruit.in-basket{animation:none;transform:scale(.76)}
.fruit .grime{position:absolute;inset:0;pointer-events:none;border-radius:50%;
  background:
    radial-gradient(9px 9px at 32% 62%,rgba(90,62,30,.6) 60%,transparent 62%),
    radial-gradient(7px 7px at 62% 44%,rgba(90,62,30,.55) 60%,transparent 62%),
    radial-gradient(6px 6px at 52% 76%,rgba(90,62,30,.5) 60%,transparent 62%);
  transition:opacity .4s}
.fruit.washing{animation:jiggle .26s linear infinite}
@keyframes jiggle{0%,100%{transform:rotate(-9deg)}50%{transform:rotate(9deg)}}
.fruit.clean .grime{opacity:0}
.fruit.sparkle{filter:drop-shadow(0 0 18px rgba(143,216,255,.95))
  drop-shadow(0 8px 10px rgba(3,33,110,.22))}

.drop-ghost{z-index:2;border:7px dashed rgba(3,33,110,.4);border-radius:40px;
  background:rgba(255,255,255,.32);animation:ghost 1.4s ease-in-out infinite}
.drop-ghost.tall{border-radius:28px}
@keyframes ghost{0%,100%{opacity:.4;transform:scale(1)}
  50%{opacity:1;transform:scale(1.05)}}

.tap{z-index:6;animation:risein .5s var(--e-out) both}
.tap.tappable{cursor:pointer;animation:risein .5s var(--e-out) both,
  tapcall 1.3s ease-in-out .5s infinite}
@keyframes tapcall{0%,100%{transform:scale(1)}50%{transform:scale(1.07)}}
.tap .tap-handle{transition:transform .4s var(--e-spring)}
.tap.open .tap-handle{transform:rotate(-82deg)}

.water{z-index:5;pointer-events:none;animation:fadein .3s both}
.water i{position:absolute;top:0;width:16px;height:100%;border-radius:10px;
  background:linear-gradient(rgba(170,228,255,.98),rgba(68,184,245,.2));
  animation:fall .42s linear infinite}
.water i:nth-child(1){left:8px;animation-delay:0s}
.water i:nth-child(2){left:28px;animation-delay:.14s;height:90%}
.water i:nth-child(3){left:48px;animation-delay:.28s;height:95%}
@keyframes fall{from{transform:translateY(-16px) scaleY(.9);opacity:.45}
  to{transform:translateY(16px) scaleY(1.06);opacity:1}}
.sink{z-index:5;filter:drop-shadow(0 12px 14px rgba(3,33,110,.22));
  animation:risein .55s .1s var(--e-out) both}
.sink-wave{animation:wave 2.6s linear infinite}
@keyframes wave{to{transform:translateX(-92px)}}
.sink.filling .sink-wave{animation:wave 1.1s linear infinite}
.counter{z-index:3;animation:risein .55s var(--e-out) both}
.pipe{z-index:1;animation:fadein .5s both}

.wash-zone{z-index:2;border-radius:50%;border:7px dashed rgba(68,184,245,.8);
  background:radial-gradient(rgba(143,216,255,.4),rgba(143,216,255,.1));
  animation:ghost 1.3s ease-in-out infinite}

.blender{z-index:9;cursor:grab;will-change:transform;
  transition:transform .35s var(--e-spring);
  filter:drop-shadow(0 14px 16px rgba(3,33,110,.22))}
.blender.blending{animation:rumble .07s linear infinite}
@keyframes rumble{0%,100%{transform:translate(0,0)}25%{transform:translate(-5px,2px)}
  75%{transform:translate(5px,-2px)}}
.blender.blending .blend-blade{animation:spin .1s linear infinite}
.blender.blending .blend-led{fill:#FF5A3C}
.blender.blending .blend-swirl{animation:swirl .42s ease-in-out infinite alternate}
@keyframes swirl{from{transform:translateX(-16px) scaleY(.9)}
  to{transform:translateX(16px) scaleY(1.1)}}
.blender.tipping{transform:rotate(-58deg)}

.hold-ring{z-index:12;display:grid;place-items:center;cursor:pointer;
  animation:fruitpop .5s var(--e-pop) both}
.hold-ring svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}
.hold-ring .track{fill:rgba(255,255,255,.92);stroke:#C8DDF2;stroke-width:16}
.hold-ring .bar{fill:none;stroke:var(--orange);stroke-width:16;stroke-linecap:round;
  transition:stroke-dashoffset .06s linear}
.hold-ring span{position:relative;font:800 46px Baloo;color:var(--navy)}
.hold-ring.held{transform:scale(.93)}
.hold-ring:not(.held){animation:fruitpop .5s var(--e-pop) both,
  btnpulse 1.5s ease-in-out .5s infinite}

.carton{z-index:7;filter:drop-shadow(0 18px 22px rgba(3,33,110,.3))}
.pour-stream{z-index:8;pointer-events:none;border-radius:24px;
  background:linear-gradient(var(--juice),color-mix(in srgb,var(--juice) 50%,transparent));
  animation:fall .3s linear infinite}

.vitamins{position:absolute;left:70px;top:1080px;width:420px;padding:30px 34px;
  border-radius:34px;background:#fff;box-shadow:var(--shadow);z-index:10;
  animation:risein .55s .2s var(--e-out) both}
.vitamins h3{font:800 42px Baloo;color:var(--navy);margin-bottom:12px}
.vitamins li{list-style:none;font:700 30px Nunito;color:#30507F;padding:8px 0 8px 46px;
  position:relative}
.vitamins li::before{content:'';position:absolute;left:0;top:12px;width:28px;height:28px;
  border-radius:50%;background:var(--apple)}
.vitamins small{display:block;margin-top:12px;font:700 28px Nunito;color:#8296B4}

.label{z-index:11;cursor:grab;will-change:transform;
  filter:drop-shadow(0 16px 20px rgba(3,33,110,.32))}
.label.sticking{transition:width .28s var(--e-out),height .28s var(--e-out)}
.label.spinning img{animation:packspin .11s linear infinite}
@keyframes packspin{0%,100%{transform:scaleX(1)}50%{transform:scaleX(.86)}}
.label.exiting{transform:rotate(-16deg)}

.vending{z-index:4;animation:risein .6s var(--e-out) both}
.vend-title{font:800 46px Baloo;fill:var(--navy);text-anchor:middle}
.vend-chute{font:800 26px Nunito;fill:#9FB8E2;text-anchor:middle;letter-spacing:3px}
/* sits inside the machine's glass window: window is y 630-1060, x 246-834 */
.vend-stock{position:absolute;left:50%;translate:-50% 0;top:646px;width:372px;
  display:flex;flex-wrap:wrap;justify-content:center;gap:20px;z-index:5;
  pointer-events:none;opacity:.85;animation:fadein .6s .3s both}
.vend-stock img{height:186px;width:auto}
.vending.working{animation:rumble .09s linear infinite}
.vend-pack{z-index:12;filter:drop-shadow(0 18px 22px rgba(3,33,110,.32))}
.vend-pack.dropped{animation:fruitpop .35s var(--e-pop) both}

/* ---------- counters, celebration, thanks ---------------------------------- */
.counter{position:absolute;right:56px;top:340px;z-index:20;padding:16px 36px;
  border-radius:60px;background:#fff;box-shadow:var(--shadow);
  font:800 52px Baloo;color:var(--navy);animation:fruitpop .5s var(--e-pop) both}
.counter span{color:var(--orange)}
.counter.tick{animation:countpop .4s var(--e-pop)}
@keyframes countpop{0%{transform:scale(1)}45%{transform:scale(1.22)}100%{transform:scale(1)}}

.celebrate{position:absolute;inset:0;z-index:80;display:grid;place-items:center;
  background:rgba(3,33,110,.45);animation:fadein .28s both;backdrop-filter:blur(3px)}
.celebrate.out{animation:fadein .3s reverse both}
.cel-card{text-align:center;padding:64px 92px;border-radius:64px;background:#fff;
  box-shadow:var(--lift);animation:celin .6s var(--e-pop) both}
@keyframes celin{from{transform:scale(.5) rotate(-8deg);opacity:0}
  to{transform:scale(1) rotate(0);opacity:1}}
.cel-card h2{font:800 110px Baloo;color:var(--orange);line-height:1;
  text-shadow:0 5px 0 rgba(200,95,8,.25)}
.cel-card p{font:700 42px Nunito;color:var(--navy);margin-top:14px}
.cel-face{margin-bottom:18px;animation:facebounce 1.1s ease-in-out infinite}
@keyframes facebounce{0%,100%{transform:translateY(0) rotate(-6deg)}
  50%{transform:translateY(-18px) rotate(6deg)}}

.thanks{position:absolute;left:50%;translate:-50% 0;top:150px;width:900px;z-index:30;
  text-align:center;padding:52px 60px;border-radius:64px;background:#fff;
  box-shadow:var(--lift);animation:celin .6s var(--e-pop) both}
.thanks h2{font:800 76px Baloo;color:var(--navy);margin:14px 0 10px}
.thanks p{font:700 40px Nunito;color:#30507F;line-height:1.35}
.thanks b{color:var(--orange)}
.th-face{animation:facebounce 1.3s ease-in-out infinite}

.spark{position:absolute;border-radius:50%;pointer-events:none;
  animation:spark .95s cubic-bezier(.2,.7,.3,1) forwards}
@keyframes spark{from{transform:translate(0,0) scale(1);opacity:1}
  to{transform:translate(var(--dx),var(--dy)) scale(.15);opacity:0}}

/* ---------- operator panel -------------------------------------------------- */
#operator{position:absolute;inset:0;z-index:100;display:grid;place-items:center;
  background:rgba(3,33,110,.62)}
.op-card{width:900px;max-height:1500px;overflow:auto;padding:48px;border-radius:40px;
  background:#fff;box-shadow:var(--lift);animation:celin .4s var(--e-out) both}
.op-card h2{font:800 56px Baloo;color:var(--navy);margin-bottom:22px}
.op-stats{max-height:420px;overflow:auto;margin-bottom:26px}
.op-stats table{width:100%;border-collapse:collapse;font:700 26px Nunito}
.op-stats th,.op-stats td{padding:12px 10px;border-bottom:2px solid #E6EDF6;text-align:left}
.op-stats th{color:#7A8CA8;font-size:22px;text-transform:uppercase;letter-spacing:1px}
.op-stats tr:first-child td{color:var(--orange)}
.muted{color:#8296B4;font:600 28px Nunito}
.op-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:24px}
.op-grid label{font:700 24px Nunito;color:#5C729B;display:flex;flex-direction:column;gap:8px}
.op-grid input[type=text],.op-grid input[type=number]{height:72px;border-radius:18px;
  border:4px solid #C8DDF2;padding:0 18px;font:700 32px Nunito;color:var(--navy)}
.op-grid .chk{flex-direction:row;align-items:center;gap:14px;font-size:28px}
.op-grid .chk input{width:36px;height:36px}
.op-queue{font:700 28px Nunito;color:#5C729B;margin-bottom:24px;
  display:flex;align-items:center;gap:16px}
.op-queue b{color:var(--orange);font-size:34px}
.op-actions{display:flex;gap:16px;flex-wrap:wrap}
.op-btn{padding:20px 38px;border:0;border-radius:22px;cursor:pointer;
  font:800 30px Baloo;color:#fff;background:var(--orange);box-shadow:0 6px 0 #C85F08}
.op-btn.ghost{background:#E6EDF6;color:var(--navy);box-shadow:0 6px 0 #C2D2E6}
.op-btn:active{transform:translateY(4px);box-shadow:none}
.op-saved{display:inline-block;margin-top:18px;opacity:0;transition:opacity .25s;
  font:700 28px Nunito;color:var(--apple)}
.op-saved.show{opacity:1}

/* respect a reduced-motion preference without breaking the game */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important}
}
