/* ============================================================
   SIGAI core components: header chips, tab bar, sheets, toast,
   mascot, step player, focus rings. Tokens live in app.css.
   ============================================================ */
:root{ --tabh:64px; --good:#12A150; --goodbg:#E3F7EC; --warnbg:#FFF1E0; --star:#F5B400; }
html[data-theme="dark"]{ --good:#3DD68C; --goodbg:#133A28; --warnbg:#3A2A14; --star:#F4C64D; }

/* keyboard focus that kids' parents & teachers can actually see */
:focus{outline:none}
:focus-visible{outline:3px solid var(--dot);outline-offset:3px;border-radius:12px}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
button{touch-action:manipulation}

/* ---- header ---- */
.brand{min-width:0}
.brand .sub{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hchips{margin-left:auto;display:flex;gap:7px;flex:none}
.hchip{background:rgba(255,255,255,.92);color:#2F4E86;border:0;border-radius:999px;
  padding:9px 12px;font:inherit;font-weight:900;font-size:14px;cursor:pointer;min-height:40px;
  box-shadow:0 3px 10px rgba(20,40,110,.22);display:inline-flex;align-items:center;gap:5px;transition:transform .1s}
.hchip:active{transform:scale(.93)}
.hchip .ico{font-size:16px;line-height:1}
.hchip.cold{filter:grayscale(1);opacity:.75}
html[data-theme="dark"] .hchip{background:rgba(38,50,105,.9);color:#D6DFFF}
@media (max-width:360px){ header .mark{width:44px;height:44px;border-radius:14px} h1{font-size:22px} .hchip{padding:8px 9px;font-size:13px} }

/* ---- 5-tab bar ---- */
.tabbar-inner{grid-template-columns:repeat(5,1fr)}
.tabbtn{min-height:52px}
.tabbtn[aria-selected="true"]{color:var(--dot)}
.tabbtn[aria-selected="true"] svg,.tabbtn[aria-selected="true"] .tabav{transform:translateY(-1px) scale(1.08)}
.tabbtn svg,.tabav{transition:transform .18s ease}
.tabav{width:25px;height:25px;display:grid;place-items:center;font-size:19px;line-height:1;border-radius:50%}
.tabbtn[aria-selected="true"] .tabav{box-shadow:0 0 0 2.5px var(--dot)}

/* ---- sheet / dialog ---- */
.sg-sheet-back{position:fixed;inset:0;z-index:80;background:rgba(8,12,30,.45);display:flex;align-items:flex-end;justify-content:center;
  opacity:0;transition:opacity .2s ease;padding:0 0 env(safe-area-inset-bottom)}
.sg-sheet-back.open{opacity:1}
.sg-sheet{width:100%;max-width:520px;max-height:88vh;overflow:auto;background:var(--card);color:var(--ink);
  border-radius:28px 28px 0 0;padding:22px 20px calc(20px + env(safe-area-inset-bottom));box-shadow:0 -10px 40px rgba(0,0,0,.25);
  transform:translateY(40px);transition:transform .24s cubic-bezier(.2,.9,.3,1.2);text-align:center}
.sg-sheet-back.open .sg-sheet{transform:none}
@media (min-width:600px){ .sg-sheet-back{align-items:center} .sg-sheet{border-radius:28px;padding-bottom:22px} }
.sg-sheet-mascot{display:flex;justify-content:center;margin:-4px 0 4px}
.sg-sheet-title{font-size:23px;font-weight:900;letter-spacing:-.4px;margin:0 0 8px}
.sg-sheet-body{font-size:15px;line-height:1.55;color:var(--ink2);font-weight:700}
.sg-sheet-body p{margin:0 0 10px}
.sg-sheet-actions{display:flex;flex-direction:column;gap:0;margin-top:10px}
.sg-sheet-actions .bigtap{margin-top:8px}

/* ---- toast ---- */
.sg-toast{position:fixed;left:50%;top:calc(14px + env(safe-area-inset-top));z-index:90;transform:translate(-50%,-140%);
  background:var(--card);color:var(--ink);border-radius:999px;padding:11px 18px 11px 14px;font-weight:800;font-size:14.5px;
  box-shadow:0 8px 28px rgba(20,30,70,.25);display:flex;align-items:center;gap:9px;max-width:calc(100vw - 32px);
  transition:transform .3s cubic-bezier(.2,.9,.3,1.2);pointer-events:none}
.sg-toast.show{transform:translate(-50%,0)}
.sg-toast .ti{font-size:22px;line-height:1}
.sg-toast.good{box-shadow:0 8px 28px rgba(18,161,80,.35),inset 0 0 0 2px var(--good)}
.sg-toast.warn{box-shadow:0 8px 28px rgba(240,69,58,.3),inset 0 0 0 2px var(--hot)}

.fx-canvas{position:fixed;inset:0;width:100vw;height:100vh;z-index:95;pointer-events:none}

/* ---- mascot ---- */
.mascot{display:block;overflow:visible}
@keyframes mbob{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes mjump{0%,100%{transform:translateY(0) scale(1)}30%{transform:translateY(-12px) scale(1.04,.96)}60%{transform:translateY(0) scale(.97,1.03)}}
@keyframes mwave{0%,100%{transform:rotate(0)}50%{transform:rotate(-24deg)}}
@keyframes mshake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
.mascot-happy,.mascot-think,.mascot-wave,.mascot-sleep{animation:mbob 3.2s ease-in-out infinite}
.mascot-cheer{animation:mjump .9s ease-in-out 2}
.mascot-oops{animation:mshake .4s ease-in-out 2}
.mascot .mwave{transform-box:fill-box;transform-origin:0% 100%;animation:mwave .9s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){ .mascot,.mascot *{animation:none!important} }

/* speech bubble next to the mascot */
.say{display:flex;align-items:center;gap:12px}
.say .bubble{position:relative;background:var(--card2);border-radius:18px;padding:12px 14px;font-size:14.5px;font-weight:800;
  line-height:1.45;color:var(--ink);flex:1}
.say .bubble::before{content:"";position:absolute;left:-7px;top:50%;margin-top:-7px;border:7px solid transparent;border-left:0;border-right-color:var(--card2)}

/* ---- numpad reuse ---- */
.sg-numpad.disabled{opacity:.5;pointer-events:none}
.sg-numpad button:disabled{opacity:.45}

/* ---- step player on SiGaI diagrams ---- */
.sg-board .st-hide{visibility:hidden}
@keyframes stdraw{from{stroke-dashoffset:var(--len)}to{stroke-dashoffset:0}}
.sg-board .gline.st-in:not(.zero){stroke-dasharray:var(--len);animation:stdraw .55s ease both}
.sg-board .dot.st-in{transform-box:fill-box;transform-origin:center;animation:pop .32s cubic-bezier(.34,1.6,.5,1) both}
.sg-board .gline.zero.st-in,.sg-board text.st-in,.sg-board rect.st-in,.sg-board path.st-in{animation:fade .35s ease both}
.sg-board.focusing .cell:not(.st-focus){opacity:.18}
.sg-board.focusing .dot:not(.st-focus){opacity:.22}
.sg-board.focusing .gline:not(.st-focus){opacity:.35}
.sg-board.focusing .hlabel:not(.st-focus){opacity:.3}
.sg-board .cell.st-focus{opacity:.9}
.sg-board .dot.st-focus{r:6.5}
.sg-board .gline,.sg-board .dot,.sg-board .cell{transition:opacity .25s ease}
@media (prefers-reduced-motion:reduce){ .sg-board .st-in{animation:none!important} }

/* step caption + controls (used by Kira, Belajar, onboarding) */
.stepbar{display:flex;align-items:center;gap:8px;margin-top:12px}
.stepbar .stepbtn{border:0;background:var(--card2);color:var(--ink);font:inherit;font-weight:900;font-size:15px;
  min-width:48px;height:48px;border-radius:15px;cursor:pointer;transition:transform .08s}
.stepbar .stepbtn:active{transform:scale(.92)}
.stepbar .stepbtn:disabled{opacity:.35}
.stepbar .stepbtn.primary{flex:1;background:linear-gradient(150deg,#4E7BFF,#2E4CE0);color:#fff;box-shadow:0 6px 16px rgba(46,76,224,.3)}
.stepcap{background:var(--card2);border-radius:16px;padding:12px 14px;margin-top:12px;font-size:15px;font-weight:800;line-height:1.5;min-height:52px;color:var(--ink)}
.stepcap .stepn{display:inline-block;font-size:11px;font-weight:900;letter-spacing:.6px;text-transform:uppercase;color:var(--dot);margin-bottom:3px}
.stepdots{display:flex;gap:5px;justify-content:center;margin-top:10px;flex-wrap:wrap}
.stepdots i{width:7px;height:7px;border-radius:50%;background:var(--hair)}
.stepdots i.on{background:var(--dot)}

/* generic pills & progress */
.pill{display:inline-flex;align-items:center;gap:5px;background:var(--card2);color:var(--ink2);border-radius:999px;
  padding:6px 11px;font-size:12.5px;font-weight:900}
.bar{height:12px;border-radius:999px;background:var(--card2);overflow:hidden}
.bar>i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#3DD68C,#12A150);transition:width .5s ease}
.stars{display:inline-flex;gap:2px;color:var(--star);letter-spacing:0}
.stars .off{color:var(--hair);filter:grayscale(1)}

/* answer boxes (SG.ui.answer) */
.ansrow{display:flex;gap:10px;justify-content:center;margin:4px 0 2px}
.ansbox{flex:1;max-width:220px;border:2.5px solid var(--hair);background:var(--card2);border-radius:20px;padding:10px 8px 12px;
  font:inherit;color:var(--ink);cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:2px;transition:border-color .15s,background .15s}
.ansbox .al{font-size:10.5px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:var(--ink2)}
.ansbox .av{font-size:36px;font-weight:900;letter-spacing:-1px;line-height:1.1}
.ansbox.empty .av{opacity:.3}
.ansbox.on,.ansrow .ansbox:only-child{border-color:var(--dot);background:var(--card)}
.ansrow.good .ansbox{border-color:var(--good);background:var(--goodbg)}
.ansrow.bad{animation:mshake .35s ease-in-out 2}
.ansrow.bad .ansbox{border-color:var(--hot)}
.ansrow.disabled{pointer-events:none}
.sg-stepper .paper{margin-top:4px}
