@font-face{font-family:'Effra';src:url('assets/fonts/effra.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'Effra';src:url('assets/fonts/effra-heavy.woff2') format('woff2');font-weight:900;font-style:normal;font-display:swap}
:root{--ink:#2a1b3d;--pink:#ff5fa2;--burg:#7c173e;--cream:#fff3df;--pinkL:#ff9cc7;--sat:env(safe-area-inset-top);--sar:env(safe-area-inset-right);--sab:env(safe-area-inset-bottom);--sal:env(safe-area-inset-left)}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;overflow:hidden;background:var(--ink);color:var(--cream);
  font-family:'Fredoka',system-ui,sans-serif;touch-action:none;overscroll-behavior:none;
  user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
#game{position:fixed;left:0;top:0;width:100%;height:100%;touch-action:none;display:block}
.hidden{display:none!important}

/* HUD */
#hud{position:fixed;left:0;right:0;top:0;display:flex;justify-content:space-between;align-items:flex-start;gap:8px;
  padding:calc(var(--sat) + 8px) calc(var(--sar) + 10px) 0 calc(var(--sal) + 10px);pointer-events:none;animation:hudIn .4s .3s both ease-out}
@keyframes hudIn{from{transform:translateY(-30px);opacity:0}to{transform:none;opacity:1}}
#hud .col{display:flex;flex-direction:column;gap:5px;align-items:flex-start;min-width:0}
#hud .mid{align-items:center;flex:1}
#hud .midrow{display:flex;gap:6px;align-items:center;justify-content:center}
#hud .right{flex-direction:row;align-items:flex-start;gap:6px;pointer-events:auto}
.pill{background:var(--cream);color:var(--burg);border:3px solid var(--burg);border-radius:12px;padding:0 10px;font-weight:600;
  font-size:clamp(13px,3.2vmin,19px);line-height:1.4;white-space:nowrap;box-shadow:0 3px 0 var(--pink),0 4px 0 rgba(0,0,0,.25)}
.pill b{color:#c51e68;margin-left:3px;font-weight:700;display:inline-block}
.pill.small{font-size:clamp(12px,2.6vmin,15px)}
.pill.big{font-size:clamp(16px,4.2vmin,24px);padding:0 14px;background:var(--burg);color:#fff;border-color:var(--ink)}
.pill.big b{color:#fff;margin:0;font-variant-numeric:tabular-nums}
.pill.bump b{animation:bump .28s ease-out}
@keyframes bump{0%{transform:scale(1)}35%{transform:scale(1.35);color:#ffb800}100%{transform:scale(1)}}
.pill.big.urgent{background:#ee2f4a;animation:urgent .5s infinite alternate}
@keyframes urgent{from{transform:scale(1)}to{transform:scale(1.14)}}
.iconbtn{pointer-events:auto;width:clamp(44px,7vmin,46px);height:clamp(44px,7vmin,46px);border-radius:12px;border:3px solid var(--burg);
  background:var(--burg);display:flex;align-items:center;justify-content:center;padding:0;cursor:pointer;touch-action:manipulation;box-shadow:0 3px 0 var(--pink)}
@media (pointer:coarse){.iconbtn{min-width:44px;min-height:44px}}
.iconbtn:active{transform:translateY(2px);box-shadow:0 1px 0 var(--pink)}
#rescueTimer{display:flex;align-items:center;gap:7px;background:var(--cream);border:3px solid var(--burg);border-radius:12px;padding:0 10px;height:clamp(28px,6.4vmin,38px);
  box-shadow:0 3px 0 var(--pink),0 4px 0 rgba(0,0,0,.25);width:min(300px,42vw);animation:slideDown .3s cubic-bezier(.2,1.5,.4,1)}
@keyframes slideDown{from{transform:translateY(-20px) scale(.8);opacity:0}to{transform:none;opacity:1}}
#rtLabel{font-size:clamp(9px,2.1vmin,12px);font-weight:600;color:var(--burg);line-height:1;max-width:5.2em;white-space:normal;text-align:left;display:none}
.bar{flex:1;height:10px;background:#e6cfd9;border-radius:6px;overflow:hidden;border:2px solid var(--burg)}
#rtFill{height:100%;width:100%;background:linear-gradient(90deg,#ffb800,var(--pink))}
#rtNum{font-size:clamp(16px,4vmin,22px);color:var(--burg);min-width:1.4em;text-align:right;font-variant-numeric:tabular-nums}
#rescueTimer.low #rtFill{background:#ee4b4b}
#rescueTimer.crit{border-color:#ee2f4a;animation:urgent .45s infinite alternate}
#rescueTimer.crit #rtNum{color:#ee2f4a}
#urgent{position:fixed;inset:0;pointer-events:none;opacity:0;transition:opacity .25s;box-shadow:inset 0 0 90px 18px rgba(238,47,74,.55)}
#urgent.on{opacity:1;animation:vig .5s infinite alternate}
@keyframes vig{from{opacity:.25}to{opacity:1}}
#flash{position:fixed;inset:0;background:#fff;opacity:0;pointer-events:none}

/* touch joystick, appears where the thumb lands */
#joyBase,#joyKnob{position:fixed;left:0;top:0;border-radius:50%;pointer-events:none;opacity:0;transition:opacity .12s;will-change:transform}
#joyBase{width:96px;height:96px;border:4px solid rgba(255,255,255,.75);background:rgba(27,26,51,.28);box-shadow:0 0 0 3px rgba(124,23,62,.55),inset 0 0 18px rgba(255,255,255,.2)}
#joyKnob{width:44px;height:44px;background:radial-gradient(circle at 35% 30%,#ffb6d6,var(--pink) 60%);border:3px solid var(--burg);box-shadow:0 3px 0 rgba(0,0,0,.3)}
#joyBase.on,#joyKnob.on{opacity:1}

/* banner (Pokemon style text box) */
#banner{position:fixed;left:50%;bottom:calc(var(--sab) + 14px);transform:translate(var(--bx,-50%),180%);
  width:min(560px,calc(100vw - 40px - var(--sal) - var(--sar)));display:flex;gap:12px;align-items:center;background:var(--cream);color:var(--burg);
  border:4px solid var(--burg);border-radius:14px;box-shadow:0 0 0 3px var(--pink),0 0 0 6px var(--cream),0 0 0 9px var(--burg),0 12px 0 6px rgba(0,0,0,.25);padding:8px 26px 8px 8px;
  pointer-events:none;position:fixed}
#banner.show{animation:bIn .55s cubic-bezier(.2,.8,.3,1) forwards}
#banner.hide{animation:bOut .3s ease-in forwards}
#banner{--bx:-50%}
@keyframes bIn{0%{transform:translate(var(--bx),180%)}55%{transform:translate(var(--bx),-14%)}75%{transform:translate(var(--bx),5%)}90%{transform:translate(var(--bx),-2%)}100%{transform:translate(var(--bx),0)}}
@keyframes bOut{from{transform:translate(var(--bx),0)}to{transform:translate(var(--bx),180%)}}
#portrait{width:64px;height:64px;border:3px solid var(--burg);border-radius:8px;flex:none;background:#fff}
#banner .txt{display:flex;flex-direction:column;gap:2px;line-height:1.2;min-height:2.6em;justify-content:center}
#bannerMain{font-size:clamp(15px,3.6vmin,21px);font-weight:700;color:var(--burg)}
#bannerSub{font-size:clamp(12px,2.8vmin,16px);color:#5b3a4a;font-weight:600}
#banner .more{position:absolute;right:10px;bottom:8px;width:0;height:0;border:7px solid transparent;border-top:9px solid var(--pink);animation:more .6s infinite alternate}
@keyframes more{to{transform:translateY(4px)}}

/* toast */
#toast{position:fixed;left:50%;top:48%;transform:translate(-50%,-50%) scale(.4);opacity:0;pointer-events:none;text-align:center;
  font-family:'Pacifico','Fredoka',cursive;font-size:clamp(34px,10vmin,72px);color:var(--pink);
  text-shadow:-3px -3px 0 var(--burg),3px -3px 0 var(--burg),-3px 3px 0 var(--burg),3px 3px 0 var(--burg),0 6px 0 var(--burg);white-space:nowrap}
#toast.pop{animation:pop 1.6s ease-out forwards}
@keyframes pop{0%{transform:translate(-50%,-50%) scale(.4) rotate(-6deg);opacity:0}14%{transform:translate(-50%,-50%) scale(1.25) rotate(3deg);opacity:1}26%{transform:translate(-50%,-50%) scale(1) rotate(-1deg)}
  80%{transform:translate(-50%,-58%) scale(1);opacity:1}100%{transform:translate(-50%,-70%) scale(1);opacity:0}}

/* transitions: GBA iris wipe */
#wipe{position:fixed;inset:0;pointer-events:none;z-index:50;--r:200vmax;
  background:radial-gradient(circle at 50% 55%,transparent var(--r),var(--ink) calc(var(--r) + 1.5px))}

/* screens */
.screen{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(ellipse at center,rgba(124,23,62,.25),rgba(27,26,51,.7));
  padding:calc(var(--sat) + 12px) calc(var(--sar) + 12px) calc(var(--sab) + 12px) calc(var(--sal) + 12px);overflow:auto;animation:fadeIn .35s ease-out}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.card{position:relative;background:var(--cream);color:var(--burg);border:5px solid var(--burg);border-radius:22px;
  box-shadow:0 0 0 4px var(--pink),0 0 0 8px var(--cream),0 0 0 11px var(--burg),0 16px 0 8px rgba(0,0,0,.28);
  padding:16px 24px 18px;max-width:min(460px,92vw);max-height:100%;text-align:center;margin:auto;animation:cardIn .5s cubic-bezier(.2,1.3,.4,1)}
@keyframes cardIn{from{transform:translateY(40px) scale(.85);opacity:0}to{transform:none;opacity:1}}
.card.small{padding:14px 28px}
.card h1{margin:4px 0 8px;font-size:clamp(30px,8vmin,50px);line-height:1;color:var(--burg);font-weight:700}
.card h1 span{font-family:'Pacifico',cursive;font-weight:400;color:var(--pink);font-size:1.05em;text-shadow:2px 2px 0 var(--burg)}
.card h2{margin:0 0 8px;font-size:clamp(26px,7vmin,38px);color:var(--burg)}
#titleGizmo{width:120px;height:90px;animation:bob 1.2s ease-in-out infinite alternate}
@keyframes bob{to{transform:translateY(-5px) rotate(-2deg)}}
.how{margin:6px 0;font-size:clamp(14px,3.3vmin,18px);font-weight:500;line-height:1.3;color:#4d2233}
.how b{color:var(--burg);font-weight:700}
.best,.hint{margin:10px 0 0;font-size:14px;color:#8a5a6b;font-weight:600}
.best b{color:var(--pink)}
.btn{margin-top:10px;font-family:inherit;font-weight:700;font-size:clamp(20px,5vmin,28px);color:#fff;background:var(--pink);border:4px solid var(--burg);
  border-radius:16px;padding:8px 28px;cursor:pointer;box-shadow:0 6px 0 var(--burg);touch-action:manipulation;min-height:48px;animation:btnPulse 1.4s ease-in-out infinite}
@keyframes btnPulse{50%{transform:scale(1.045)}}
.btn:hover{background:#ff74af}
.btn:active{transform:translateY(5px);box-shadow:0 1px 0 var(--burg);animation:none}
.btn:disabled{opacity:.6;cursor:wait;animation:none}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:8px 0}
.stats div{background:#fff;border:3px solid var(--burg);border-radius:12px;padding:4px 8px;display:flex;flex-direction:column}
.stats span{font-size:13px;color:#8a5a6b;font-weight:600}
.stats b{font-size:26px;color:var(--burg);font-variant-numeric:tabular-nums}
.stats .total{grid-column:1/3;background:var(--pinkL)}
.stats .total span{color:var(--burg)}
.stats .total b{font-size:38px}
.newbest{margin:4px 0;font-weight:700;color:var(--pink);font-size:20px;animation:urgent .5s infinite alternate}

@media (max-height:420px){
  .card{padding:8px 16px 10px;border-radius:16px}#titleGizmo{width:72px;height:54px}.card h1{font-size:26px;margin:0 0 4px}.how{margin:3px 0;font-size:13px}.btn{margin-top:6px;padding:4px 20px;font-size:20px;min-height:40px}.best{margin-top:4px}
  .stats{margin:4px 0;gap:5px}.stats b{font-size:20px}.stats .total b{font-size:26px}.card h2{font-size:24px;margin-bottom:4px}
  #banner{--bx:0%;left:calc(var(--sal) + 10px);width:min(380px,47vw);padding:4px 24px 4px 4px;bottom:calc(var(--sab) + 8px);border-width:3px;gap:8px;box-shadow:0 0 0 3px var(--pink),0 0 0 5px var(--cream),0 0 0 7px var(--burg)}
  #portrait{width:44px;height:44px}#bannerMain{font-size:14px}#bannerSub{font-size:11px}
  #toast{font-size:38px;top:44%}
}
@media (max-aspect-ratio:1/1){
  #rescueTimer{position:fixed;left:0;right:0;margin:0 auto;top:calc(var(--sat) + 74px);width:min(300px,78vw)}
  /* The rescue row sits below the controls; the canvas map measures this row before placing itself. */
  @media (max-width:480px){#rescueTimer{left:calc(var(--sal) + 112px);right:calc(var(--sar) + 10px);width:auto;max-width:300px;margin:0 0 0 auto}}
}
@media (prefers-reduced-motion:reduce){#urgent.on{animation:none;opacity:.6}.btn{animation:none}}

/* ---- rescue timer intro (big centre number that flies into the HUD) ---- */
#bigTimer{position:fixed;left:0;top:0;z-index:60;pointer-events:none;opacity:0;visibility:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;will-change:transform,opacity}
#bigTimer .num{display:block;font:700 min(30vmin,190px)/1 Fredoka,'Arial Rounded MT Bold',sans-serif;color:#ff5fa2;-webkit-text-stroke:.075em #7c173e;paint-order:stroke fill;
  text-shadow:0 .06em 0 #7c173e,0 0 .35em rgba(255,95,162,.75),0 0 .9em rgba(255,95,162,.45);letter-spacing:.01em}
#bigTimer .go{display:block;margin-top:-.1em;font:700 min(9vmin,56px)/1 Fredoka,sans-serif;color:#fff3df;-webkit-text-stroke:.16em #7c173e;paint-order:stroke fill;letter-spacing:.08em;opacity:0}
#bigTimer .ring{position:absolute;left:50%;top:42%;width:min(52vmin,330px);height:min(52vmin,330px);border-radius:50%;border:.55vmin solid #ff5fa2;box-shadow:0 0 22px 4px rgba(255,95,162,.6),inset 0 0 22px 2px rgba(255,95,162,.45);opacity:0;transform:translate(-50%,-50%)}
#bigTimer .ring.r2{border-color:#ffe38a;box-shadow:0 0 18px 2px rgba(255,227,138,.55)}
#rescueTimer.pre{opacity:0}
#rtNum.land{animation:rtland .42s cubic-bezier(.2,1.6,.4,1)}
@keyframes rtland{0%{transform:scale(2.1);color:#ffb800}100%{transform:scale(1)}}
#timePill{position:relative}
#timePill.plus::after{content:attr(data-plus);position:absolute;left:50%;top:100%;margin-top:2px;font:700 15px/1 Fredoka,sans-serif;color:#ff5fa2;-webkit-text-stroke:3px #7c173e;paint-order:stroke fill;transform:translateX(-50%);pointer-events:none;animation:plusrise .9s ease-out forwards}
@keyframes plusrise{0%{opacity:0;transform:translate(-50%,-6px) scale(.5)}20%{opacity:1;transform:translate(-50%,0) scale(1.25)}100%{opacity:0;transform:translate(-50%,12px) scale(1)}}
@media (prefers-reduced-motion:reduce){#rtNum.land,#timePill.plus::after{animation:none}}

/* ---- slide-anywhere steering: only a faint ring at the anchor and a dot under the thumb ---- */
#game{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
#joyBase.soft{border:2px solid rgba(255,255,255,.9);background:rgba(255,255,255,.05);box-shadow:none}
#joyKnob.soft{background:rgba(255,255,255,.9);border:0;box-shadow:0 0 0 2px rgba(124,23,62,.35)}
#joyBase.soft.on{opacity:.28}
#joyKnob.soft.on{opacity:.4}
#joyBase.soft,#joyKnob.soft{transition:opacity .35s}
#bigTimer::before{content:"";position:absolute;left:50%;top:44%;width:min(80vmin,460px);height:min(50vmin,290px);transform:translate(-50%,-50%);background:radial-gradient(closest-side,rgba(42,27,61,.5),rgba(42,27,61,0));z-index:-1}

/* ---- rehome bonus: +45s pops from the cafe door and flies into the round clock ---- */
#bonusFly{position:fixed;left:0;top:0;z-index:61;pointer-events:none;opacity:0;visibility:hidden;will-change:transform,opacity}
#bonusFly b{display:block;font:700 min(20vmin,120px)/1 Fredoka,'Arial Rounded MT Bold',sans-serif;color:#ffe38a;-webkit-text-stroke:.09em #7c173e;paint-order:stroke fill;
  text-shadow:0 .06em 0 #7c173e,0 0 .3em rgba(255,95,162,.9),0 0 .8em rgba(255,95,162,.55)}
#bonusFly .ring{position:absolute;left:50%;top:50%;width:min(36vmin,220px);height:min(36vmin,220px);border-radius:50%;border:.5vmin solid #ff5fa2;box-shadow:0 0 20px 3px rgba(255,95,162,.6);opacity:0;transform:translate(-50%,-50%)}

/* ---- Aaron's order: the shared HUD timer wears a pink border ---- */
#rescueTimer.order{border-color:#e8127c}
#rescueTimer.order #rtLabel{display:block;max-width:6.4em}
#rescueTimer.order #rtFill{background:linear-gradient(90deg,#ffb3d6,#ff2f8f)}

/* ---- Puguccino power-up: HUD countdown ring + screen-edge shimmer (elements are created by js/main.js) ---- */
#pugPill{display:flex;align-items:center;gap:4px;padding:0 9px 0 3px;height:clamp(28px,6.4vmin,36px);background:var(--cream)}
#pugPill svg{flex:0 0 auto;display:block;width:clamp(24px,5.6vmin,32px);height:clamp(24px,5.6vmin,32px)}
#pugPill .bg{fill:#fff;stroke:#f1c6d8;stroke-width:4}
#pugPill .fg{fill:none;stroke:#ff2f8f;stroke-width:4;stroke-linecap:round;stroke-dasharray:94.25;stroke-dashoffset:0;transition:stroke-dashoffset .12s linear}
#pugPill text{font:700 12px Fredoka,sans-serif;fill:#7c173e}
#pugPill.warn{animation:pugBlink .28s steps(2,jump-none) infinite}
#pugPill.warn .fg{stroke:#ee2f4a}
@keyframes pugBlink{0%{opacity:1}100%{opacity:.35}}
#pugEdge{position:fixed;inset:0;pointer-events:none;display:none;opacity:0;
  background:conic-gradient(from 0deg at 50% 50%,#ff4d6d,#ff9f43,#ffe14d,#5fdc7a,#4db8ff,#b07cff,#ff4d6d);
  -webkit-mask-image:radial-gradient(ellipse at center,transparent 60%,rgba(0,0,0,.55) 100%);mask-image:radial-gradient(ellipse at center,transparent 60%,rgba(0,0,0,.55) 100%)}
/* only exists (display) while powered up: nothing runs when it is off */
#pugEdge.on{display:block;opacity:1;animation:pugIn .35s ease-out,pugHue 2.6s linear infinite}
#pugEdge.on.warn{animation:pugIn .01s,pugHue 2.6s linear infinite,pugBlink .28s steps(2,jump-none) infinite}
@keyframes pugIn{from{opacity:0}to{opacity:1}}
@keyframes pugHue{to{filter:hue-rotate(360deg)}}
@media (prefers-reduced-motion:reduce){#pugEdge.on,#pugEdge.on.warn{animation:none;opacity:.6}#pugPill.warn{animation:none}}
@media (max-aspect-ratio:1/1){
  #pugPill{position:fixed;left:calc(var(--sal) + 10px);top:calc(var(--sat) + 8px + 34px + 40px)}
}

/* ---- round clock frozen while a rescue / errand countdown runs: grey + pause icon, and the rescue timer is the prominent one ---- */
#timePill.frozen{filter:grayscale(1) brightness(.9);opacity:.72;transition:opacity .25s,filter .25s}
#timePill.frozen::before{content:"";display:inline-block;width:.22em;height:.62em;margin-right:.45em;vertical-align:-.02em;border-left:.2em solid #fff;border-right:.2em solid #fff}
#rescueTimer.solo{box-shadow:0 3px 0 var(--pink),0 0 0 3px rgba(255,255,255,.75),0 0 16px 4px rgba(255,95,162,.55)}
#rescueTimer.solo #rtNum{font-size:clamp(19px,4.8vmin,27px)}

/* Calm, readable HUD details: cream paper, berry type and generous control targets. */
#hud .left .pill{font-variant-numeric:tabular-nums}
#timePill{min-width:72px;text-align:center}
#hud .iconbtn{border-color:#651131;box-shadow:0 3px 0 var(--pink),0 5px 8px rgba(42,27,61,.16)}
.iconbtn:focus-visible,.btn:focus-visible{outline:3px solid #ffe38a;outline-offset:4px}
@media (hover:hover){.iconbtn:hover{background:#95194c}}
@media (max-aspect-ratio:1/1){
  #hud .mid{position:absolute;left:0;right:0;top:calc(var(--sat) + 8px)}
  #hud .right{margin-left:auto}
  #teaPill{font-size:12px}
  #pugPill{top:calc(var(--sat) + 108px)}
}
@media (max-width:360px){
  #hud{gap:4px}
  #hud .right{gap:4px}
  #hud .left .pill{padding-right:7px;padding-left:7px}
  #timePill{min-width:64px;padding-right:9px;padding-left:9px}
}
@media (prefers-reduced-motion:reduce){
  #hud,.card,#titleGizmo,.pill.big.urgent,#rescueTimer.crit,.newbest{animation:none}
}

.stroll-choice{background:#fff3df;color:#7c173e;border:2px solid #d4136f;margin-top:8px;font-size:clamp(14px,2.5vw,18px)}
body.stroll #scorePill,body.stroll .stats .total{display:none}
#strollPurpose{max-width:min(340px,75vw);font-size:12px;line-height:1.35;color:#fff3df;background:#7c173e;border-radius:12px;padding:7px 12px;pointer-events:none}

#strollPurpose{position:absolute;left:50%;top:calc(var(--sat) + 62px);transform:translateX(-50%);text-align:center;width:max-content;max-width:min(340px,calc(100vw - 24px))}

html.quiet-scroll,body.quiet-scroll{touch-action:pan-y}#title .card,#results .card{max-height:calc(100dvh - var(--sat) - var(--sab) - 24px);overflow-y:auto;touch-action:pan-y}.town-promotion{margin:14px 0 0;padding:12px;background:#ffe7ef;border:2px solid #7c173e;border-radius:12px;font-size:14px;line-height:1.35}.town-promotion[hidden]{display:none}.town-promotion p{margin:6px 0}.town-promotion a{display:inline-block;color:#7c173e;font-weight:900;text-decoration:underline;padding:6px}.lb-town-note{color:#7c173e;font-size:14px;line-height:1.35;margin:8px 0}
#timePill.plus[data-plus^="-"]::after{color:#ff6b6b}
