:root{
  --red:#ff3b3b;--red-d:#d42a2a;--brand:#ffd400;--brand-d:#e0b400;--yellow:#ffc82c;--yellow-d:#e0a800;--blue:#2f8cff;--blue-d:#1a6ad6;
  --green:#2fc66a;--green-d:#1fa152;--purple:#9b5cff;--purple-d:#7a3fe0;--orange:#ff8a1f;--orange-d:#e06d00;
  --pink:#ff5fa8;--teal:#16c5c5;--ink:#2b2340;--soft:#fff7e6;
  --sat:env(safe-area-inset-top,0px);--sab:env(safe-area-inset-bottom,0px);--sal:env(safe-area-inset-left,0px);--sar:env(safe-area-inset-right,0px);
  --font:ui-rounded,"SF Pro Rounded","Hiragino Maru Gothic ProN","Arial Rounded MT Bold","PingFang SC","HarmonyOS Sans SC","MiSans","Microsoft YaHei",system-ui,sans-serif;
  --tabh:76px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;overscroll-behavior:none}
body{font-family:var(--font);font-weight:800;color:var(--ink);background:var(--soft);
  -webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-text-size-adjust:100%}
input,textarea{font-family:var(--font);font-weight:700;-webkit-user-select:text;user-select:text}
button{font-family:var(--font);font-weight:900;border:0;cursor:pointer;color:inherit;touch-action:manipulation}
#app{height:100%;display:flex;flex-direction:column}
.bg-dots{background-color:#fff8d6;background-image:radial-gradient(#ffd977 2px,transparent 2.5px),radial-gradient(#ffd0e4 2px,transparent 2.5px);
  background-size:36px 36px;background-position:0 0,18px 18px}

/* bouncy press */
.press{transition:transform .12s cubic-bezier(.3,1.6,.5,1),box-shadow .12s}
.press:active,.press.down{transform:scale(.92) translateY(3px)}
@keyframes pop{0%{transform:scale(.6);opacity:0}70%{transform:scale(1.08);opacity:1}100%{transform:scale(1)}}
@keyframes bob{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-10px) rotate(3deg)}}
@keyframes wiggle{0%,100%{transform:rotate(0)}25%{transform:rotate(-8deg)}75%{transform:rotate(8deg)}}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(255,75,75,.6)}100%{box-shadow:0 0 0 28px rgba(255,75,75,0)}}
.pop{animation:pop .45s cubic-bezier(.3,1.6,.5,1) both}
.bob{animation:bob 2.6s ease-in-out infinite}

/* chunky 3D buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:56px;padding:0 26px;border-radius:999px;
  font-size:20px;color:#fff;background:var(--blue);box-shadow:0 6px 0 var(--blue-d),0 10px 18px rgba(0,0,0,.12)}
.btn:active{box-shadow:0 2px 0 var(--blue-d)}
.btn.red{background:var(--red);box-shadow:0 6px 0 var(--red-d),0 10px 18px rgba(0,0,0,.12)}
.btn.green{background:var(--green);box-shadow:0 6px 0 var(--green-d),0 10px 18px rgba(0,0,0,.12)}
.btn.yellow{background:var(--yellow);color:#5a3b00;box-shadow:0 6px 0 var(--yellow-d),0 10px 18px rgba(0,0,0,.12)}
.btn.white{background:#fff;color:var(--ink);box-shadow:0 6px 0 #e6dccb,0 10px 18px rgba(0,0,0,.08)}
.btn.small{min-height:48px;font-size:17px;padding:0 18px}

/* ---------- login ---------- */
.login{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;
  padding:calc(var(--sat) + 20px) calc(var(--sar) + 20px) calc(var(--sab) + 20px) calc(var(--sal) + 20px);overflow:auto}
.login h1{margin:0;font-size:clamp(30px,7vw,46px);color:#f08c00;text-shadow:0 4px 0 #fff,0 6px 0 rgba(0,0,0,.08)}
.mascot-wrap{display:inline-block;position:relative;line-height:0}
.mascot-wrap img{width:100%;height:auto;pointer-events:none;-webkit-user-drag:none}
.mascot{width:clamp(120px,30vw,180px);filter:drop-shadow(0 10px 12px rgba(0,0,0,.18))}
.mascot-wrap.sleep img{filter:grayscale(.35) brightness(.95)}
.mascot-wrap .zzz{position:absolute;right:-6px;top:-4px;font-size:36px;line-height:1;animation:bob 2s infinite}
.off{filter:grayscale(.85);opacity:.6}
.offnote{display:block;font-size:13px;opacity:.95;margin-top:2px}
.who{display:flex;flex-wrap:wrap;gap:22px;justify-content:center}
.who .kid{width:clamp(140px,38vw,200px);aspect-ratio:1/1.1;border-radius:36px;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:8px;color:#fff;font-size:26px}
.who .kid .av{font-size:clamp(64px,17vw,96px);line-height:1}
.c0{background:var(--red);box-shadow:0 8px 0 var(--red-d),0 14px 24px rgba(0,0,0,.15)}
.c1{background:var(--blue);box-shadow:0 8px 0 var(--blue-d),0 14px 24px rgba(0,0,0,.15)}
.c2{background:var(--green);box-shadow:0 8px 0 var(--green-d),0 14px 24px rgba(0,0,0,.15)}
.c3{background:var(--yellow);color:#5a3b00!important;box-shadow:0 8px 0 var(--yellow-d),0 14px 24px rgba(0,0,0,.15)}
.c4{background:var(--purple);box-shadow:0 8px 0 var(--purple-d),0 14px 24px rgba(0,0,0,.15)}
.c5{background:var(--orange);box-shadow:0 8px 0 var(--orange-d),0 14px 24px rgba(0,0,0,.15)}
.parent-link{margin-top:6px;background:rgba(255,255,255,.8);border-radius:999px;min-height:48px;padding:0 20px;font-size:16px;color:#6b5d7a}
.pin-dots{display:flex;gap:16px;margin:6px 0}
.pin-dots i{width:24px;height:24px;border-radius:50%;background:#fff;border:4px solid #e0d4bd;transition:.15s}
.pin-dots i.on{background:var(--yellow);border-color:var(--yellow-d);transform:scale(1.15)}
.pin-dots.shake{animation:wiggle .35s 2}
.pad{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;width:min(340px,86vw)}
.pad button{aspect-ratio:1;border-radius:50%;font-size:34px;background:#fff;box-shadow:0 6px 0 #e6dccb,0 10px 16px rgba(0,0,0,.08);min-height:64px}
.pad button:active{box-shadow:0 2px 0 #e6dccb}
.pad .k-del{background:#ffe1e1}.pad .k-back{background:#e5f1ff;font-size:24px}
.err{color:var(--red);min-height:26px;font-size:18px}

/* ---------- shell ---------- */
.top{display:flex;align-items:center;gap:10px;padding:calc(var(--sat) + 10px) calc(var(--sar) + 14px) 10px calc(var(--sal) + 14px);
  background:var(--brand);color:#4a3200;border-radius:0 0 28px 28px;box-shadow:0 6px 0 var(--brand-d);z-index:5}
.top .me{width:52px;height:52px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;font-size:34px}
.top .hi{flex:1;font-size:22px;line-height:1.1}
.top .hi small{display:block;font-size:14px;opacity:.9}
.timepill{background:#fff;color:var(--red);border-radius:999px;padding:8px 14px;font-size:17px;white-space:nowrap}
.main{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:18px calc(var(--sar) + 14px) calc(var(--tabh) + var(--sab) + 18px) calc(var(--sal) + 14px)}
.tabs{position:fixed;left:0;right:0;bottom:0;display:flex;justify-content:space-around;gap:6px;background:#fff;
  padding:8px calc(var(--sar) + 8px) calc(var(--sab) + 8px) calc(var(--sal) + 8px);border-radius:28px 28px 0 0;
  box-shadow:0 -6px 20px rgba(0,0,0,.08);z-index:10}
.tabs button{flex:1;max-width:160px;min-height:60px;border-radius:22px;background:transparent;display:flex;flex-direction:column;
  align-items:center;justify-content:center;font-size:14px;color:#8a7f99;position:relative}
.tabs button .ic{font-size:30px;line-height:1}
.tabs button.on{color:#fff}
.tabs button.on[data-t=home]{background:var(--brand);color:#4a3200}.tabs button.on[data-t=chat]{background:var(--blue)}
.tabs button.on[data-t=video]{background:var(--yellow);color:#5a3b00}.tabs button.on[data-t=msg]{background:var(--green)}
.badge{position:absolute;top:4px;right:calc(50% - 30px);min-width:22px;height:22px;border-radius:11px;background:var(--red);color:#fff;
  font-size:13px;display:flex;align-items:center;justify-content:center;padding:0 6px;border:2px solid #fff}

/* ---------- home tiles ---------- */
.hello{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.hello .mascot{width:92px;flex:none}
.bubble-say{background:#fff;border-radius:24px;padding:14px 18px;font-size:20px;box-shadow:0 6px 0 #f0e4cc;position:relative}
.grid-big{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
.tile{border-radius:32px;min-height:150px;padding:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
  color:#fff;font-size:22px;text-align:center}
.tile .em{font-size:60px;line-height:1;filter:drop-shadow(0 4px 0 rgba(0,0,0,.12))}
.sec-title{font-size:22px;margin:24px 4px 12px}
.grid-cat{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.cat{border-radius:26px;aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;font-size:15px;color:#fff;min-height:76px}
.cat .em{font-size:38px;line-height:1}

/* ---------- chat ---------- */
.chat-wrap{display:flex;flex-direction:column;height:100%}
.models{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-bottom:12px}
.models button{min-height:48px;padding:0 18px;border-radius:999px;background:#fff;font-size:17px;box-shadow:0 4px 0 #e6dccb}
.models button.on{background:var(--blue);color:#fff;box-shadow:0 4px 0 var(--blue-d)}
.msgs{display:flex;flex-direction:column;gap:12px;padding-bottom:12px}
.msg{max-width:84%;padding:14px 18px;border-radius:26px;font-size:19px;line-height:1.5;white-space:pre-wrap;word-break:break-word;font-weight:700;
  -webkit-user-select:text;user-select:text;animation:pop .35s cubic-bezier(.3,1.6,.5,1) both}
.msg.me{align-self:flex-end;background:var(--blue);color:#fff;border-bottom-right-radius:8px}
.msg.ai{align-self:flex-start;background:#fff;border-bottom-left-radius:8px;box-shadow:0 4px 0 #f0e4cc;display:flex;gap:10px;align-items:flex-start}
.msg.ai .who-ai{width:40px;height:auto;flex:none}
.msg.ai .say{flex:1}
.msg .spk{flex:none;width:48px;height:48px;border-radius:50%;background:var(--yellow);font-size:22px;box-shadow:0 3px 0 var(--yellow-d)}
.msg .tag{display:block;font-size:12px;color:#a59bb3;margin-top:4px}
.typing{align-self:flex-start;background:#fff;border-radius:26px;padding:14px 22px;font-size:26px;letter-spacing:4px;box-shadow:0 4px 0 #f0e4cc}
.typing span{display:inline-block;animation:bob 1s infinite}.typing span:nth-child(2){animation-delay:.15s}.typing span:nth-child(3){animation-delay:.3s}
.composer{position:fixed;left:0;right:0;bottom:calc(var(--tabh) + var(--sab) + 4px);display:flex;gap:10px;align-items:center;
  padding:10px calc(var(--sar) + 12px) 10px calc(var(--sal) + 12px);z-index:9}
.composer input{flex:1;min-width:0;min-height:58px;border-radius:999px;border:4px solid #fff;background:#fff;padding:0 20px;font-size:19px;
  box-shadow:0 6px 18px rgba(0,0,0,.1);outline:none}
.composer input:focus{border-color:var(--blue)}
.mic{width:72px;height:72px;flex:none;border-radius:50%;background:var(--red);color:#fff;font-size:34px;
  box-shadow:0 6px 0 var(--red-d),0 10px 18px rgba(0,0,0,.15);touch-action:none}
.mic.rec{background:#ff2d2d;animation:pulse 1s infinite;transform:scale(1.12)}
.send{width:58px;height:58px;flex:none;border-radius:50%;background:var(--green);color:#fff;font-size:26px;box-shadow:0 5px 0 var(--green-d)}
.chat-pad{height:96px}
.hold-tip{position:fixed;left:50%;top:40%;transform:translate(-50%,-50%);background:rgba(43,35,64,.9);color:#fff;border-radius:32px;
  padding:26px 34px;font-size:24px;text-align:center;z-index:50;pointer-events:none}
.hold-tip .em{font-size:64px;display:block;animation:wiggle .6s infinite}

/* ---------- video ---------- */
.notice{background:#fff;border:3px dashed var(--yellow);border-radius:20px;padding:10px 14px;font-size:14px;color:#7a6400;margin-bottom:12px;font-weight:700}
.search{display:flex;gap:10px;margin-bottom:12px}
.search input{flex:1;min-width:0;min-height:58px;border-radius:999px;border:4px solid var(--yellow);padding:0 20px;font-size:19px;outline:none;background:#fff}
.search .btn{min-width:58px;padding:0 18px}
.chips{display:flex;gap:10px;overflow-x:auto;padding:4px 2px 12px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chips button{flex:none;min-height:48px;padding:0 18px;border-radius:999px;color:#fff;font-size:17px}
.vgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.vcard{background:#fff;border-radius:24px;overflow:hidden;box-shadow:0 6px 0 #f0e4cc,0 8px 16px rgba(0,0,0,.06);text-align:left;padding:0;display:flex;flex-direction:column}
.vcard .th{aspect-ratio:16/9;background:#ffe9a8 center/cover no-repeat;display:flex;align-items:center;justify-content:center;font-size:40px}
.vcard .tt{padding:10px 12px 4px;font-size:15px;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.vcard .ch{padding:0 12px 12px;font-size:12px;color:#9a8fa8;font-weight:700}
.player{position:fixed;inset:0;background:#1d1530;z-index:60;display:flex;flex-direction:column;
  padding:calc(var(--sat) + 10px) calc(var(--sar) + 10px) calc(var(--sab) + 10px) calc(var(--sal) + 10px)}
.player .bar{display:flex;align-items:center;gap:10px;color:#fff;margin-bottom:10px}
.player .bar .t{flex:1;font-size:17px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.player .frame{flex:1;display:flex;align-items:center;justify-content:center}
.player .frame>div,.player iframe{width:100%;max-width:calc((100vh - 120px)*16/9);aspect-ratio:16/9;border:0;border-radius:18px;background:#000}
.empty{text-align:center;padding:30px 10px;font-size:19px;color:#8a7f99}
.empty .em{font-size:64px;display:block}

/* ---------- family messages ---------- */
.fam{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:12px}
.fam button{border-radius:28px;aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:#fff;font-size:18px;min-height:96px}
.fam button .av{font-size:48px;line-height:1}
.inbox{display:flex;flex-direction:column;gap:12px}
.vm{display:flex;align-items:center;gap:12px;background:#fff;border-radius:24px;padding:12px 14px;box-shadow:0 5px 0 #f0e4cc}
.vm .av{font-size:40px}
.vm .info{flex:1;font-size:17px}
.vm .info small{display:block;color:#9a8fa8;font-size:13px;font-weight:700}
.vm .play{width:60px;height:60px;border-radius:50%;background:var(--green);color:#fff;font-size:26px;box-shadow:0 5px 0 var(--green-d)}
.vm.new{outline:4px solid var(--yellow)}
.sheet{position:fixed;inset:0;background:rgba(29,21,48,.55);z-index:70;display:flex;align-items:flex-end;justify-content:center}
.sheet .card{background:#fff;width:100%;max-width:560px;border-radius:36px 36px 0 0;padding:24px 22px calc(var(--sab) + 26px);text-align:center;
  display:flex;flex-direction:column;align-items:center;gap:16px;animation:pop .35s both}
.sheet .card h2{margin:0;font-size:26px}
.sheet .card p{margin:0;font-size:18px;color:#6b5d7a;font-weight:700;line-height:1.5}
.bigmic{width:132px;height:132px;border-radius:50%;background:var(--red);color:#fff;font-size:60px;box-shadow:0 8px 0 var(--red-d);touch-action:none}
.bigmic.rec{animation:pulse 1s infinite;transform:scale(1.08)}
.row{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}

/* ---------- lock ---------- */
.lock{position:fixed;inset:0;z-index:80;background:linear-gradient(#2d2a6e,#5b3fa8);color:#fff;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:18px;text-align:center;padding:30px calc(var(--sar) + 24px) calc(var(--sab) + 30px) calc(var(--sal) + 24px)}
.lock .moon{font-size:110px}
.lock h2{font-size:28px;margin:0;line-height:1.4}
.toast{position:fixed;left:50%;top:calc(var(--sat) + 90px);transform:translateX(-50%);background:var(--ink);color:#fff;border-radius:999px;
  padding:12px 22px;font-size:17px;z-index:90;animation:pop .3s both;max-width:90vw;text-align:center}

/* tablet + landscape */
@media (min-width:700px){
  .grid-big{grid-template-columns:repeat(4,1fr)}
  .tile{min-height:190px;font-size:24px}.tile .em{font-size:72px}
  .grid-cat{grid-template-columns:repeat(8,1fr)}
  .vgrid{grid-template-columns:repeat(3,1fr)}
  .fam{grid-template-columns:repeat(5,1fr)}
  .main{padding-left:calc(var(--sal) + 28px);padding-right:calc(var(--sar) + 28px)}
  .msgs,.chat-wrap .models{max-width:860px;margin-left:auto;margin-right:auto;width:100%}
  .composer{max-width:900px;margin:0 auto}
}
@media (min-width:1050px){.vgrid{grid-template-columns:repeat(4,1fr)}}
@media (orientation:landscape) and (max-height:520px){
  :root{--tabh:62px}
  .tabs button{min-height:50px;flex-direction:row;gap:6px}.tabs button .ic{font-size:24px}
  .top{padding-top:calc(var(--sat) + 6px);padding-bottom:6px}.top .me{width:44px;height:44px;font-size:28px}
  .grid-big{grid-template-columns:repeat(4,1fr)}.tile{min-height:120px}.tile .em{font-size:48px}
  .grid-cat{grid-template-columns:repeat(8,1fr)}
  .vgrid{grid-template-columns:repeat(3,1fr)}
  .login{flex-direction:row;flex-wrap:wrap}
  .pad{width:min(280px,40vw)}.pad button{min-height:52px;font-size:28px}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---------- v2 cute components ---------- */
.ico{display:block;flex:none}
.tile-ic{display:block;filter:drop-shadow(0 4px 0 rgba(0,0,0,.12));animation:bob 3s ease-in-out infinite}
.tile:nth-child(2) .tile-ic{animation-delay:.4s}.tile:nth-child(3) .tile-ic{animation-delay:.8s}.tile:nth-child(4) .tile-ic{animation-delay:1.2s}
.iconbtn{background:transparent;border-radius:50%;min-width:52px;min-height:52px;display:flex;align-items:center;justify-content:center;padding:2px}
.iconbtn.big{min-width:60px;min-height:60px}
.timepill{display:flex;align-items:center;gap:4px}
.tabs button .ic{display:flex;transition:transform .2s cubic-bezier(.3,1.6,.5,1)}
.tabs button.on .ic{transform:scale(1.15) translateY(-2px)}
.tabs button:not(.on) .ic{filter:saturate(.75)}
.sec-title{display:flex;align-items:center;gap:8px}
.toast{display:flex;align-items:center;gap:10px;padding:8px 20px 8px 8px;background:#fff;color:var(--ink);border:3px solid var(--brand);box-shadow:0 8px 20px rgba(0,0,0,.15)}
.toast-dog{width:40px;height:40px;object-fit:contain;border-radius:50%;background:#fff3b0}
.state{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:24px 12px;font-size:19px;color:#6b5d7a}
.state p{margin:0}.state small{font-size:15px;font-weight:700;color:#9a8fa8}
.mascot-mid{width:120px}
.mascot-wrap.sad img{filter:saturate(.8);transform:rotate(-8deg)}
.state .dots{display:flex;gap:8px}.state .dots i{width:14px;height:14px;border-radius:50%;background:var(--brand);animation:bob 1s infinite}
.state .dots i:nth-child(2){background:var(--blue);animation-delay:.15s}.state .dots i:nth-child(3){background:var(--red);animation-delay:.3s}
.player .state{color:#fff}
.quick{display:flex;gap:10px;overflow-x:auto;padding:2px 2px 12px;scrollbar-width:none}.quick::-webkit-scrollbar{display:none}
.quick button{flex:none;min-height:48px;padding:0 16px;border-radius:999px;background:#fff;border:3px solid var(--brand);font-size:16px}
.typing{display:flex;align-items:center;gap:6px}.typing img{width:34px;height:auto;margin-right:4px}
.busy{animation:wiggle .5s infinite}
.msg .spk{display:flex;align-items:center;justify-content:center;background:#fff3b0}
.send,.mic{display:flex;align-items:center;justify-content:center}
.send{background:#fff;box-shadow:0 5px 0 #e6dccb}
.mic{background:#fff;box-shadow:0 6px 0 #ffc9c9,0 10px 18px rgba(0,0,0,.15);border:4px solid var(--red)}
.mic.rec{background:#ffe1e1}
.bigmic{display:flex;align-items:center;justify-content:center;background:#fff;border:6px solid var(--red);box-shadow:0 8px 0 #ffc9c9}
.vm .play{background:transparent;box-shadow:none;display:flex;align-items:center;justify-content:center}
.notice{display:flex;align-items:center;gap:8px;border-color:var(--blue);color:#1a4f8f}
.pad .k-back,.pad .k-del{display:flex;align-items:center;justify-content:center}
.parent-link{display:inline-flex;align-items:center;gap:8px}
.lock .moon{animation:bob 3s infinite}
.sheet .card .btn .ico,.btn .ico{margin-right:2px}
input:focus{box-shadow:0 0 0 5px rgba(255,212,0,.45)}
.search input:focus{border-color:var(--brand-d)}
.c1 .tile-ic svg path[fill="#4da3ff"]{fill:#bfe3ff}
/* desktop: centered app column */
@media (min-width:1100px){
  .main{max-width:1180px;margin:0 auto;width:100%}
  .top{max-width:1180px;margin:0 auto;width:calc(100% - 32px)}
  .tabs{max-width:720px;margin:0 auto;left:50%;transform:translateX(-50%);bottom:16px;border-radius:999px;box-shadow:0 10px 30px rgba(0,0,0,.12)}
  .composer{bottom:calc(var(--tabh) + 24px)}
  body{background-color:#fff8d6}
}
.tile-ic{background:rgba(255,255,255,.95);border-radius:50%;padding:12px;box-shadow:inset 0 -4px 0 rgba(0,0,0,.08)}
.chat-pad{height:170px}
@media (min-width:700px){.grid-cat{grid-template-columns:repeat(9,1fr)}}
@media (orientation:landscape) and (max-height:520px){.grid-cat{grid-template-columns:repeat(9,1fr)}.tile-ic{padding:6px}.tile-ic svg{width:48px;height:48px}}

/* ---------- per-kid theme accent ---------- */
:root{--accent:var(--brand);--accent-d:var(--brand-d);--accent-ink:#4a3200;--accent-soft:#fff3b0}
body.theme-purple{--accent:#9b5cff;--accent-d:#7a3fe0;--accent-ink:#fff;--accent-soft:#efe5ff}
body.theme-yellow{--accent:#ffd400;--accent-d:#e0b400;--accent-ink:#4a3200;--accent-soft:#fff3b0}
body.theme-red{--accent:#ff4b4b;--accent-d:#d42a2a;--accent-ink:#fff;--accent-soft:#ffe1e1}
body.theme-blue{--accent:#2f8cff;--accent-d:#1a6ad6;--accent-ink:#fff;--accent-soft:#e2efff}
body.theme-green{--accent:#2fc66a;--accent-d:#1fa152;--accent-ink:#fff;--accent-soft:#e0f7e9}
body.theme-orange{--accent:#ff8a1f;--accent-d:#e06d00;--accent-ink:#fff;--accent-soft:#ffecd9}
body.theme-pink{--accent:#ff5fa8;--accent-d:#e0408a;--accent-ink:#fff;--accent-soft:#ffe3f0}
.c6{background:var(--pink);box-shadow:0 8px 0 #e0408a,0 14px 24px rgba(0,0,0,.15)}
.top{background:var(--accent);color:var(--accent-ink);box-shadow:0 6px 0 var(--accent-d)}
.timepill{color:var(--accent-d)}
.tabs button.on[data-t=home]{background:var(--accent);color:var(--accent-ink)}
.msg.me{background:var(--accent);color:var(--accent-ink)}
.models button.on{background:var(--accent);color:var(--accent-ink);box-shadow:0 4px 0 var(--accent-d)}
.quick button{border-color:var(--accent)}
.toast{border-color:var(--accent)}
.bubble-say{box-shadow:0 6px 0 var(--accent-soft)}
body.theme-purple .bg-dots{background-color:#f6efff;background-image:radial-gradient(#d9c2ff 2px,transparent 2.5px),radial-gradient(#ffd0e4 2px,transparent 2.5px)}
body.theme-purple{background:#f8f2ff}
body.theme-purple .login h1{color:#7a3fe0}
.pin-dots i.on{background:var(--accent);border-color:var(--accent-d)}

/* avatars */
.avimg{width:1em;height:1em;border-radius:50%;object-fit:cover;display:inline-block;vertical-align:middle;border:3px solid #fff;box-shadow:0 3px 8px rgba(0,0,0,.15)}
.avemoji{display:inline-block;line-height:1}
.top .me{border:0;padding:0;overflow:hidden;font-size:34px}
.top .me .avimg{width:52px;height:52px;border:0}
.who .kid .avimg{font-size:clamp(64px,17vw,96px)}
.pinav.avimg{width:110px;height:110px;border:0}
.fam button .avimg{font-size:56px}
.vm .avimg{font-size:44px}
.bigface{font-size:84px}
.avgrid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;width:100%;max-width:420px}
.avgrid button{aspect-ratio:1;border-radius:20px;background:#fff8d6;font-size:34px;min-height:52px}
.avgrid button.on{background:var(--accent-soft);outline:4px solid var(--accent)}
.avpick{display:flex;flex-direction:column;align-items:center;gap:14px;width:100%}
.sheet .card .err{min-height:24px}
.gear-corner{position:fixed;top:calc(var(--sat) + 12px);right:calc(var(--sar) + 12px);width:56px;height:56px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 5px 0 #e6dccb,0 8px 16px rgba(0,0,0,.1);z-index:20}
.gear-corner .ico{animation:spin 8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
.voicelist{display:flex;flex-direction:column;gap:8px;width:100%;max-height:55vh;overflow:auto}
.voice{display:flex;align-items:center;gap:10px;background:#fff8d6;border-radius:18px;padding:6px 10px}
.voice.on{outline:3px solid #2fc66a;background:#e9f9ef}
.voice .vn{flex:1;text-align:left;font-size:16px}
.busy{animation:wiggle .5s infinite}

/* stickers & photos */
.stkgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;width:100%;max-width:520px;max-height:55vh;overflow:auto}
.stkgrid button{background:#fff8d6;border-radius:20px;padding:6px;min-height:64px}
.stkgrid img{width:100%;height:auto;display:block}
.stkimg{display:block;width:120px;height:auto;margin-top:6px}
.msg.me.stk{background:transparent;padding:0}
.msgtools{gap:14px}
.toolbtn{display:flex;flex-direction:column;align-items:center;gap:4px;background:#fff8d6;border-radius:22px;padding:10px 14px;min-width:84px;font-size:15px;font-weight:800;box-shadow:0 4px 0 #f0e4cc}
.thumb{width:72px;height:72px;border-radius:18px;overflow:hidden;padding:0;background:#fff8d6;flex:none}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}
.photoview{position:fixed;inset:0;background:rgba(20,12,4,.9);z-index:95;display:flex;align-items:center;justify-content:center;padding:calc(var(--sat,0px) + 20px) 12px calc(var(--sab,0px) + 20px)}
.photoview img{max-width:100%;max-height:100%;border-radius:18px}
.closeph{position:absolute;top:calc(env(safe-area-inset-top,0px) + 12px);right:12px}

.tapplay{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(var(--sab) + 104px);z-index:92;display:flex;align-items:center;gap:8px;
  background:#fff;border-radius:999px;padding:8px 18px 8px 8px;font-weight:800;font-size:17px;box-shadow:0 5px 0 #f0d76a,0 10px 24px rgba(0,0,0,.15);animation:pop .3s both}
.tapplay img{width:40px;height:40px;border-radius:50%}
.ybnote{display:flex;align-items:center;gap:10px;margin:0 auto 14px;background:#fff;border:3px solid var(--brand);border-radius:22px;padding:10px 16px;font-weight:800;font-size:18px;box-shadow:0 5px 0 var(--brand-d)}
.cat.fav{outline:4px solid #fff;box-shadow:0 0 0 7px var(--brand),0 6px 0 rgba(0,0,0,.08)}
.lock.sleeping h2{font-size:30px}

.login-yb{display:flex;flex-direction:column;align-items:center;gap:6px;width:100%;max-width:520px}
.login-stk{width:min(62vw,300px);height:auto;filter:drop-shadow(0 10px 18px rgba(0,0,0,.12))}
.login-yb.small .login-stk{width:min(42vw,190px)}
.login-yb .bubble-say{font-size:20px;text-align:center;max-width:92%}
@media (max-height:700px){.login-stk{width:min(48vw,220px)}.login-yb.small .login-stk{width:min(30vw,130px)}}
.greet-stk{width:100%;height:auto}
.hello .mascot-wrap{width:120px;flex:none}

.essay-wrap{display:flex;flex-direction:column;gap:14px;padding-bottom:20px}
.essay-wrap .card{background:#fff;border-radius:24px;padding:14px 16px;box-shadow:0 5px 0 #f0e4cc}
.essay-wrap h3{margin:0 0 8px;font-size:20px}
.essay-new{display:flex;gap:10px;flex-wrap:wrap}
.essay-new input,.note-in input,.essay-wrap .row input{flex:1;min-width:0;font-size:18px;padding:12px 14px;border-radius:16px;border:2px solid #f0e4cc;font-family:inherit}
.essay-item{display:flex;flex-direction:column;align-items:flex-start;text-align:left;gap:4px;font-size:19px}
.essay-top h2{margin:0;font-size:22px}
.notebook{margin:0 0 10px;padding-left:28px;font-size:19px;line-height:1.7;background:repeating-linear-gradient(#fffdf3 0 32px,#f3e7c4 32px 33px);border-radius:14px;padding-top:4px;padding-bottom:4px}
.notebook li{position:relative;padding-right:34px}
.notebook li.empty{list-style:none;margin-left:-20px;color:#9a8a70;font-size:16px}
.notebook .mini{position:absolute;right:2px;top:2px;background:#fff;border-radius:50%;width:28px;height:28px;font-size:14px}
.essay-body{width:100%;box-sizing:border-box;font-size:19px;line-height:1.8;border-radius:16px;border:2px solid #f0e4cc;padding:12px;font-family:inherit;background:#fffdf3}
.essay-wrap .row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:8px}
.essay-msgs{max-height:340px;overflow:auto}
.mic.small{width:52px;height:52px;flex:none}

.bones{display:inline-flex;gap:1px;margin-right:4px}
.bones i{font-style:normal;font-size:13px;filter:grayscale(1) opacity(.35);transition:filter .3s}
.bones i.on{filter:none;animation:pop .4s both}
@media (max-width:380px){.bones{display:none}}

.ear{display:inline-flex;align-items:center;gap:6px;background:#fff;border-radius:999px;padding:6px 12px;font-weight:800;font-size:14px;box-shadow:0 3px 0 #f0e4cc;margin-left:auto}
.ear .ear-ic{font-size:18px}
.ear.idle .ear-ic{animation:earwig 2.4s ease-in-out infinite}
.ear.listening{background:#ffe36b;box-shadow:0 0 0 4px rgba(255,212,0,.35),0 3px 0 #e6c200;animation:pop .3s both}
.ear.listening .ear-ic{animation:pulse 0.8s ease-in-out infinite}
.ear.off{opacity:.6}
@keyframes earwig{0%,100%{transform:rotate(0)}10%{transform:rotate(-14deg)}20%{transform:rotate(10deg)}30%{transform:rotate(0)}}
@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.25)}}
