/* kid.css — everything a child sees. One structure, three worlds set by tokens on <body data-world>. */
:root{--f-pinky:#9B8CF0;--f-ring:#4ECEF8;--f-middle:#71E554;--f-index:#E8C547;--f-thumb:#8A969E}
.f-pinky{--fc:var(--f-pinky)}.f-ring{--fc:var(--f-ring)}.f-middle{--fc:var(--f-middle)}.f-index{--fc:var(--f-index)}.f-thumb{--fc:var(--f-thumb)}

/* ---------- world tokens ---------- */
body[data-world]{--k-ink:#1E2640;--k-ink2:#5A6178;--k-line:rgba(30,38,64,.14);--k-panel:#fff;--k-panel-blur:0px;--k-r:22px;--k-acc:#FFC94A;--k-acc-ink:#1E2640;--k-acc-glow:rgba(255,201,74,.45);
  --k-head:'Fraunces',Georgia,serif;--k-body:'Nunito',system-ui,sans-serif;--k-chip:rgba(255,255,255,.88);--k-good:#2F6B4F;--k-done:#9FCDB2;--k-cur-bg:#FFF3D1;--k-cur-line:#FFC94A;--k-miss:#FF7A59;--k-todo:#1E2640;
  --k-shadow:0 1px 2px rgba(30,38,64,.06),0 8px 28px rgba(30,38,64,.1);--k-bg:#EAF3F1;font-family:var(--k-body);color:var(--k-ink);background:var(--k-bg)}
body[data-world="neutral"]{--k-bg:linear-gradient(180deg,#FBF7F0,#EFE8D8)}
body[data-world="forest"]{--k-bg:linear-gradient(180deg,#BFE3F7 0%,#DDF0E4 55%,#C7E6CF 100%)}
body[data-world="space"]{--k-bg:#0B0A2E;--k-ink:#EAF0FF;--k-ink2:#9AA6D6;--k-line:rgba(140,170,255,.2);--k-panel:rgba(20,28,70,.58);--k-panel-blur:14px;--k-r:20px;--k-acc:#3DE8FF;--k-acc-ink:#041026;--k-acc-glow:rgba(61,232,255,.5);
  --k-head:'Space Grotesk',system-ui,sans-serif;--k-chip:rgba(20,28,70,.62);--k-good:#3DFFB0;--k-done:#3DE8FF;--k-cur-bg:rgba(255,200,87,.18);--k-cur-line:#FFC857;--k-miss:#FF4FD8;--k-todo:#C9D3F5;--k-shadow:0 0 0 1px rgba(140,170,255,.18),0 10px 40px rgba(0,0,0,.45)}
body[data-world="deep"]{--k-bg:#04060A;--k-ink:#D5DCE0;--k-ink2:#8A969E;--k-line:rgba(200,220,230,.16);--k-panel:rgba(10,14,18,.8);--k-panel-blur:10px;--k-r:0px;--k-acc:#5CC8E0;--k-acc-ink:#04121A;--k-acc-glow:rgba(92,200,224,.4);
  --k-head:'Rajdhani',system-ui,sans-serif;--k-body:'Inter',system-ui,sans-serif;--k-chip:rgba(10,14,18,.8);--k-good:#71E554;--k-done:#5CC8E0;--k-cur-bg:rgba(232,197,71,.16);--k-cur-line:#E8C547;--k-miss:#E8A33D;--k-todo:#7F8B92;--k-shadow:0 0 0 1px rgba(200,220,230,.13)}
body[data-world]{margin:0;min-height:100vh}
.k-bg{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
body[data-world] #app{position:relative;z-index:1}
body[data-world] h1,body[data-world] h2,body[data-world] h3{font-family:var(--k-head);color:inherit}
body[data-world="deep"] h1,body[data-world="deep"] h2{text-transform:uppercase;letter-spacing:.06em}
.k-sub{color:var(--k-ink2);font-weight:700;margin:6px 0 0}
.dim{opacity:.3}

/* ---------- buttons, chips, panels ---------- */
.k-go{border:0;cursor:pointer;font:inherit;font-family:var(--k-head);font-weight:800;font-size:19px;padding:15px 30px;border-radius:calc(var(--k-r) - 4px);background:var(--k-acc);color:var(--k-acc-ink);
  box-shadow:0 5px 0 color-mix(in srgb,var(--k-acc) 55%,#000),0 0 30px var(--k-acc-glow);transition:transform .08s,filter .2s;white-space:nowrap}
.k-go:hover{filter:brightness(1.07)}.k-go:active{transform:translateY(3px);box-shadow:0 2px 0 color-mix(in srgb,var(--k-acc) 55%,#000)}
.k-go.ghost{background:transparent;color:var(--k-ink);box-shadow:inset 0 0 0 2px var(--k-line)}
body[data-world="deep"] .k-go{text-transform:uppercase;letter-spacing:.14em;font-size:16px;clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px);box-shadow:none}
body[data-world="deep"] .k-go.ghost{box-shadow:none;background:rgba(255,255,255,.04);outline:1px solid var(--k-line);outline-offset:-1px}
.k-link{background:none;border:0;color:var(--k-ink2);font:inherit;font-weight:800;cursor:pointer;text-decoration:none;padding:8px 12px;border-radius:10px}
.k-link:hover{color:var(--k-ink);background:rgba(127,127,127,.12)}
.k-chip{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:999px;background:var(--k-chip);backdrop-filter:blur(var(--k-panel-blur));box-shadow:var(--k-shadow);font-family:var(--k-head);font-weight:800;font-size:15px;border:0;color:var(--k-ink)}
body[data-world="deep"] .k-chip{border-radius:0;letter-spacing:.08em;text-transform:uppercase;font-size:13px}
.k-chip .av{width:32px;height:32px;margin-left:-8px;border-radius:50%;display:grid;place-items:center;background:rgba(127,127,127,.15);font-size:18px}
body[data-world="deep"] .k-chip .av{border-radius:0}
.k-chipbtn{cursor:pointer}.k-chipbtn:hover{filter:brightness(1.1)}.k-chipbtn:disabled{opacity:.45;cursor:not-allowed}
.k-panel{background:var(--k-panel);backdrop-filter:blur(var(--k-panel-blur));-webkit-backdrop-filter:blur(var(--k-panel-blur));border-radius:var(--k-r);box-shadow:var(--k-shadow);padding:16px 18px}
.k-panel h3{margin:0 0 8px;font-size:18px;font-weight:700}
body[data-world="deep"] .k-panel h3{font-size:12px;letter-spacing:.2em;color:var(--k-ink2)}

/* ---------- who's playing / PIN ---------- */
.k-who-screen{min-height:100vh;display:grid;place-items:center;padding:24px 16px}
.k-who-card{width:min(560px,100%);background:#fff;border-radius:28px;box-shadow:var(--k-shadow);padding:34px 28px 26px;text-align:center}
.k-brand{display:flex;gap:10px;align-items:center;justify-content:center;font-family:'Fraunces',serif;font-weight:700;font-size:24px;margin-bottom:18px}
.k-who-card h1{font-size:34px;margin:0}
.k-who-grid{display:flex;gap:14px;flex-wrap:wrap;justify-content:center;margin:26px 0 8px}
.k-who-btn{position:relative;width:132px;padding:16px 8px 14px;border:2.5px solid var(--k-line);border-radius:22px;background:#FBF7F0;cursor:pointer;font:inherit;transition:transform .12s,border-color .12s}
.k-who-btn:hover,.k-who-btn:focus-visible{transform:translateY(-3px);border-color:#2F6B4F;outline:none}
.k-who-btn .av{display:block;font-size:52px;line-height:1.1}.k-who-btn .nm{display:block;font-weight:900;font-size:19px;margin-top:6px}
.k-who-btn .lk{position:absolute;right:10px;top:8px;font-size:13px;opacity:.6}
.k-who-foot{margin-top:18px}
.k-pin-av{font-size:64px}
.k-pin-dots{display:flex;gap:14px;justify-content:center;margin:20px 0}
.k-pin-dots i{width:20px;height:20px;border-radius:50%;border:2.5px solid #2F6B4F;transition:background .1s}
.k-pin-dots i.on{background:#2F6B4F}
.shake{animation:kshake .3s}
@keyframes kshake{25%{transform:translateX(-7px)}75%{transform:translateX(7px)}}
.k-pad{display:grid;grid-template-columns:repeat(3,76px);gap:10px;justify-content:center}
.k-pad button{height:64px;border-radius:18px;border:0;background:#F2ECE1;font:inherit;font-weight:900;font-size:26px;cursor:pointer;box-shadow:inset 0 -3px 0 rgba(0,0,0,.08)}
.k-pad button:active{transform:translateY(2px)}.k-pad .ghost{background:transparent;box-shadow:none;cursor:default}

/* ---------- world picker ---------- */
body[data-world="neutral"]:has(.k-pick){--k-bg:#0D1017;--k-ink:#F2F4F8;--k-ink2:#9AA3B5;--k-line:rgba(255,255,255,.14)}
.k-pick{--acc:#FFC94A;--on:#1E2640;max-width:1240px;margin:0 auto;padding:26px 16px 30px;color:#F2F4F8;min-height:100vh;display:flex;flex-direction:column}
.k-pick[data-w="space"]{--acc:#B07BFF;--on:#fff}.k-pick[data-w="deep"]{--acc:#5CC8E0;--on:#04121A}
.k-pick-head{text-align:center;display:flex;flex-direction:column;align-items:center;gap:6px}
.k-pick-head .k-chip{background:rgba(255,255,255,.08);color:#fff}
.k-pick-head h1{font-family:'Nunito';font-weight:900;font-size:clamp(32px,4.6vw,54px);margin:6px 0 0;letter-spacing:-.02em;line-height:1.05;color:#fff}
.k-pick-head p{margin:0;color:#9AA3B5;font-size:17px;font-weight:700}.k-pick-head b{color:#fff}
.k-cards{display:flex;gap:18px;margin-top:24px;height:min(calc(100vh - 340px),540px);min-height:390px}
.k-wcard{flex:1;position:relative;border:0;padding:0;border-radius:26px;overflow:hidden;background:#000;text-align:left;cursor:pointer;transition:flex .45s cubic-bezier(.2,.8,.2,1),transform .25s,box-shadow .25s;box-shadow:0 0 0 1px rgba(255,255,255,.14),0 20px 50px rgba(0,0,0,.4);font:inherit;color:#fff;--acc:#FFC94A;--on:#1E2640}
.k-wcard[data-w="space"]{--acc:#B07BFF;--on:#fff;border-radius:26px}.k-wcard[data-w="deep"]{--acc:#5CC8E0;--on:#04121A;border-radius:6px}
.k-wcard.on{flex:1.6;box-shadow:0 0 0 3px var(--acc),0 0 50px color-mix(in srgb,var(--acc) 45%,transparent),0 20px 50px rgba(0,0,0,.5)}
.k-wcard:hover{transform:translateY(-4px)}.k-wcard:focus-visible{outline:3px solid #fff}
.k-wprev{position:absolute;inset:0}.k-wprev svg{width:100%;height:100%;display:block}
.k-wcard[data-w="forest"] .k-wprev{background:linear-gradient(180deg,#BFE3F7,#DDF0E4 55%,#C7E6CF)}
.k-wcard[data-w="space"] .k-wprev{background:radial-gradient(ellipse at 25% 75%,rgba(123,92,255,.5),transparent 55%),radial-gradient(ellipse at 75% 25%,rgba(255,79,216,.3),transparent 50%),#0B0A2E}
.k-wcard[data-w="deep"] .k-wprev{background:radial-gradient(ellipse at 40% 40%,rgba(60,90,140,.4),transparent 60%),#03050A}
.k-wshade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,0) 30%,rgba(0,0,0,.6) 62%,rgba(0,0,0,.9));pointer-events:none}
.k-wnum{position:absolute;left:16px;top:16px;width:34px;height:34px;border-radius:10px;background:rgba(0,0,0,.55);border:1px solid rgba(255,255,255,.25);display:grid;place-items:center;font-weight:900}
.k-age{position:absolute;left:58px;top:16px;height:34px;display:flex;align-items:center;padding:0 14px;border-radius:999px;background:rgba(0,0,0,.6);border:1.5px solid var(--acc);font-weight:900;font-size:15px}
.k-ribbon{position:absolute;left:50%;top:-1px;transform:translateX(-50%);z-index:2;padding:7px 16px 8px;border-radius:0 0 14px 14px;background:var(--acc);color:var(--on);font-weight:900;font-size:14px;white-space:nowrap;box-shadow:0 6px 20px rgba(0,0,0,.35)}
.k-wcard:has(.k-ribbon) .k-age{display:none}
.k-picked{position:absolute;right:16px;top:16px;z-index:3;display:none;height:34px;align-items:center;padding:0 14px;border-radius:999px;background:var(--acc);color:var(--on);font-weight:900;font-size:14px}
.k-wcard.on .k-picked{display:flex}.k-wcard:has(.k-ribbon) .k-picked{top:42px}
.k-winfo{position:absolute;left:0;right:0;bottom:0;padding:22px 24px}
.k-winfo h2{margin:0 0 6px;font-size:32px;color:#fff}
.k-wcard[data-w="forest"] h2{font-family:'Fraunces',serif;font-weight:600;text-transform:none;letter-spacing:0}
.k-wcard[data-w="space"] h2{font-family:'Space Grotesk';font-weight:700;text-transform:none;letter-spacing:0}
.k-wcard[data-w="deep"] h2{font-family:'Rajdhani';font-weight:700;letter-spacing:.12em;text-transform:uppercase}
.k-winfo p{margin:8px 0 0;color:rgba(255,255,255,.85);font-weight:700;font-size:15.5px;line-height:1.45;max-width:420px}
.k-fit{display:inline-block;font-size:13px;font-weight:800;padding:3px 10px;border-radius:8px;background:rgba(255,255,255,.14);color:rgba(255,255,255,.85)}
.k-fit.fits{background:rgba(113,229,84,.2);color:#B9F5A6}
.k-pick-foot{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:20px;flex-wrap:wrap}
.k-keys{display:flex;align-items:center;gap:8px;color:#9AA3B5;font-weight:700;font-size:15px;flex-wrap:wrap}
.k-keys kbd,.k-pick kbd{display:inline-grid;place-items:center;min-width:30px;height:30px;padding:0 8px;border-radius:8px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.2);font-family:inherit;font-weight:900;font-size:14px;color:#fff}
.k-pick .k-go{background:var(--acc);color:var(--on)}
.k-reassure{text-align:center;color:#9AA3B5;font-weight:700;font-size:14px;margin:14px 0 0}
.k-wipe{position:fixed;inset:0;z-index:100;pointer-events:none;background:var(--acc);clip-path:circle(0% at 50% 100%);transition:clip-path .7s cubic-bezier(.7,0,.3,1)}
.k-wipe.on{clip-path:circle(150% at 50% 100%)}
.k-wipe div{position:absolute;inset:0;display:grid;place-items:center;font-weight:900;font-size:clamp(28px,4vw,48px);color:var(--on);opacity:0;transition:opacity .3s .4s}
.k-wipe.on div{opacity:1}

/* ---------- map ---------- */
.k-screen{min-height:100vh;display:flex;flex-direction:column}
.k-top{display:flex;align-items:center;gap:10px;padding:14px 20px;flex-wrap:wrap;position:relative;z-index:3}
.k-top .grow{flex:1}
.k-map{flex:1;display:grid;grid-template-columns:1fr 320px;gap:16px;padding:0 20px 8px;min-height:0}
.k-mapbox{min-height:min(62vh,640px);position:relative}
.k-mapsvg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.k-side{display:flex;flex-direction:column;gap:12px;padding-bottom:84px;position:relative;z-index:2}
.k-goal{display:flex;flex-direction:column;gap:6px;margin-bottom:6px}.k-goal span{font-weight:800;font-size:14px;color:var(--k-ink2)}
.k-goalbar{height:10px;border-radius:99px;background:rgba(127,127,127,.2);overflow:hidden}.k-goalbar i{display:block;height:100%;width:0;background:var(--k-acc);border-radius:99px;transition:width .6s}
.k-quests{list-style:none;margin:0;padding:0}
.k-quests li{display:flex;gap:10px;align-items:center;padding:8px 0;font-weight:700;font-size:15px;border-top:1px solid var(--k-line)}
.k-quests li:first-child{border-top:0}
.k-quests .ck{width:22px;height:22px;border-radius:7px;border:2px solid var(--k-line);flex:none;display:grid;place-items:center;font-size:13px;color:var(--k-acc-ink)}
.k-quests li.done .ck{background:var(--k-good);border-color:var(--k-good)}.k-quests li.done{color:var(--k-ink2)}
.k-info-t{font-family:var(--k-head);font-weight:800;font-size:28px;line-height:1.1}
.k-keysrow{display:flex;gap:8px;margin:10px 0 4px;flex-wrap:wrap}
.k-keychip{display:inline-flex;flex-direction:column;align-items:center;padding:6px 12px;border-radius:12px;font-weight:900;font-size:20px;border:2px solid var(--fc);background:color-mix(in srgb,var(--fc) 18%,transparent);line-height:1.1}
.k-keychip small{font-size:11px;font-weight:700;opacity:.8}
.k-sub2{color:var(--k-ink2);font-weight:700;font-size:14px;margin:8px 0 2px}
.k-stats{display:flex;gap:6px;margin-top:12px}.k-stats>div{flex:1;text-align:center;padding:8px 4px;border-radius:12px;background:rgba(127,127,127,.1)}
.k-stats b{display:block;font-family:var(--k-head);font-size:20px;color:var(--k-ink)}.k-stats b{color:var(--k-acc)}body[data-world="forest"] .k-stats b{color:#D9A21E}
.k-stats small{font-size:11px;font-weight:800;color:var(--k-ink2);text-transform:uppercase;letter-spacing:.08em}
.k-cheer{display:flex;align-items:center;gap:10px;padding:12px 14px;border-radius:var(--k-r);background:var(--k-acc);color:var(--k-acc-ink);font-weight:800;box-shadow:var(--k-shadow);margin-bottom:2px;animation:pop .5s}
.k-cheer .e{font-size:24px}.k-cheer .t{flex:1;line-height:1.3}.k-cheer .x{border:0;background:rgba(0,0,0,.12);border-radius:50%;width:26px;height:26px;cursor:pointer;color:inherit}
@keyframes pop{0%{transform:scale(.9);opacity:0}100%{transform:none;opacity:1}}
.k-cta{position:sticky;bottom:0;z-index:4;display:flex;align-items:center;justify-content:center;gap:18px;padding:12px 16px 16px;pointer-events:none}
.k-cta>*{pointer-events:auto}
.k-cta-t,.k-rest{background:var(--k-panel);backdrop-filter:blur(var(--k-panel-blur));box-shadow:0 12px 40px rgba(0,0,0,.25);border-radius:calc(var(--k-r) + 4px);padding:12px 22px}
.k-cta-t{padding-right:0;background:none;box-shadow:none;backdrop-filter:none}
.k-cta{background:linear-gradient(0deg,rgba(0,0,0,.0),transparent)}
.k-cta:has(.k-cta-t) .k-cta-t{background:var(--k-panel);backdrop-filter:blur(var(--k-panel-blur));box-shadow:0 12px 40px rgba(0,0,0,.25);border-radius:calc(var(--k-r) + 4px);padding:12px 22px}
.k-cta-t small{display:block;font-weight:800;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--k-ink2)}
.k-cta-t b{font-family:var(--k-head);font-size:22px}
.k-rest{display:flex;gap:14px;align-items:center}.k-rest-ico{font-size:32px}.k-rest b{display:block;font-family:var(--k-head);font-size:20px}.k-rest small{color:var(--k-ink2);font-weight:700}
/* map svg styling */
.mnode{cursor:pointer}.mnode .hit{fill:transparent}.mnode.locked{cursor:default}
.mnode .selring{stroke:var(--k-ink);stroke-width:2;stroke-dasharray:4 5;opacity:0}.mnode.sel .selring{opacity:.85}
.mnode:focus-visible .selring{opacity:1;stroke:#fff}.mnode:focus{outline:none}
.m-lbl{font-family:'Rajdhani',sans-serif;font-weight:700;font-size:15px;letter-spacing:.05em;fill:#B9C2C8}.m-sec{font-weight:700}
[data-world="space"] .m-lbl{font-family:'Space Grotesk';fill:#EAF0FF;font-size:14px}
.m-region{font-family:'Fraunces',serif;font-weight:600;font-size:19px;fill:#1E2640}.m-region-pill{fill:rgba(255,255,255,.9)}
[data-world="space"] .m-region{font-family:'Space Grotesk';fill:#EAF0FF;font-size:17px}[data-world="space"] .m-region-pill{fill:rgba(20,28,70,.78);stroke:rgba(140,170,255,.35)}
.m-region-deep{font-family:'Rajdhani';font-weight:700;font-size:17px;letter-spacing:.32em;fill:rgba(213,220,224,.55)}.m-sector{font-weight:700;fill:rgba(232,197,71,.8)}
.m-pulse{transform-box:fill-box;transform-origin:center;animation:mpulse 2s ease-out infinite}
@keyframes mpulse{0%{opacity:.9;transform:scale(1)}100%{opacity:0;transform:scale(1.6)}}
.m-bob{animation:mbob 3s ease-in-out infinite}@keyframes mbob{50%{transform:translateY(-5px)}}

/* ---------- lesson ---------- */
.k-lesson{min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:clamp(8px,1.8vh,18px) 16px clamp(8px,2vh,26px);position:relative;overflow:hidden}
.k-lesson>*{position:relative;z-index:2}
.k-warp{position:absolute!important;inset:0;width:100%;height:100%;z-index:0!important;pointer-events:none}
.k-ltop{width:100%;max-width:980px;display:flex;align-items:center;gap:16px}
.k-x{width:44px;height:44px;border-radius:calc(var(--k-r) - 8px);border:0;background:var(--k-chip);box-shadow:var(--k-shadow);color:var(--k-ink2);font-size:14px;cursor:pointer;flex:none}
.k-route{flex:1;position:relative;height:28px}
.k-track{position:absolute;left:0;right:0;top:10px;height:8px;border-radius:99px;background:rgba(127,127,127,.25)}
.k-fill{position:absolute;left:0;top:10px;height:8px;border-radius:99px;width:0;background:linear-gradient(90deg,var(--k-good),var(--k-acc));transition:width .25s}
.k-mark{position:absolute;top:2px;left:0;width:24px;height:24px;margin-left:-12px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 14px var(--k-acc-glow);transition:left .25s}
.k-dest{position:absolute;right:-8px;top:0;width:28px;height:28px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#FFE2A8,#FF9B5C 45%,#9B3D7A)}
[data-world="forest"] .k-dest{background:#2F6B4F;box-shadow:inset 0 -3px 0 rgba(0,0,0,.2)}[data-world="forest"] .k-dest::after{content:"🏡";position:absolute;inset:0;display:grid;place-items:center;font-size:15px}
[data-world="forest"] .k-mark::after{content:"🦊";position:absolute;inset:0;display:grid;place-items:center;font-size:14px}[data-world="forest"] .k-mark{background:#fff;box-shadow:var(--k-shadow)}
[data-world="space"] .k-mark{background:none;box-shadow:none}[data-world="space"] .k-mark::after{content:"🚀";position:absolute;inset:0;font-size:22px;transform:rotate(45deg);filter:drop-shadow(0 0 6px var(--k-acc))}
[data-world="deep"] .k-track,[data-world="deep"] .k-fill{height:3px;top:12px}[data-world="deep"] .k-mark{width:10px;height:10px;margin-left:-5px;top:9px;border-radius:0;transform:rotate(45deg)}
.k-pill{display:inline-flex;align-items:center;padding:7px 14px;border-radius:999px;background:var(--k-chip);backdrop-filter:blur(var(--k-panel-blur));box-shadow:var(--k-shadow);font-weight:800;font-size:14px;white-space:nowrap;font-family:var(--k-head);color:var(--k-ink)}
[data-world="deep"] .k-pill{border-radius:0;letter-spacing:.1em;text-transform:uppercase;font-size:12.5px}
.k-lesson{--lv:clamp(120px,24vh,280px)}
.k-lview{position:absolute!important;left:0;right:0;top:64px;height:var(--lv);z-index:1!important;pointer-events:none}
.k-dplanet{position:absolute;left:50%;top:44%;width:var(--lv);height:var(--lv);transform:translate(-50%,-50%) scale(.3);transition:transform .5s ease-out}.k-dplanet canvas{width:100%;height:100%}
.k-ship-rear{position:absolute;left:50%;bottom:-6px;width:clamp(130px,28vh,250px);transform:translateX(-50%);filter:drop-shadow(0 10px 20px rgba(0,0,0,.8))}
.k-ship-rear .eng{transform-origin:center;transform-box:fill-box;transition:transform .3s,opacity .3s}
.k-warp-lbl{position:absolute;left:50%;top:0;transform:translateX(-50%);font-family:'Rajdhani';font-weight:700;letter-spacing:.4em;font-size:13px;color:var(--k-acc);opacity:0;transition:opacity .3s;text-shadow:0 0 12px var(--k-acc)}
.k-stage{display:flex;align-items:flex-end;gap:16px;margin:clamp(6px,2vh,20px) 0 clamp(4px,1.4vh,14px);width:100%;max-width:980px}
[data-world="deep"] .k-stage{margin-top:calc(var(--lv) + 8px);margin-bottom:8px;justify-content:center;align-items:center}
.k-comp.bob{animation:mbob 3s ease-in-out infinite}.k-comp svg{display:block}
.k-bubble{background:var(--k-panel);backdrop-filter:blur(var(--k-panel-blur));border-radius:20px 20px 20px 5px;padding:12px 18px;font-weight:800;font-size:17px;box-shadow:var(--k-shadow);max-width:420px;margin-bottom:34px;line-height:1.4}
[data-world="deep"] .k-bubble{border-radius:0;margin:0;max-width:720px;font-weight:600;font-size:15px;border-left:2px solid var(--k-acc)}
.k-who{display:block;font-family:'Rajdhani',sans-serif;font-size:11px;letter-spacing:.16em;color:var(--k-acc);margin-bottom:2px}[data-world="forest"] .k-who{display:none}
.k-frame{width:100%;max-width:980px;background:var(--k-panel);backdrop-filter:blur(var(--k-panel-blur));border-radius:calc(var(--k-r) + 6px);box-shadow:var(--k-shadow);padding:clamp(18px,3.4vh,30px) 34px;position:relative}
[data-world="space"] .k-frame{box-shadow:0 0 0 1px rgba(140,200,255,.4),0 0 60px rgba(61,232,255,.12),inset 0 0 40px rgba(61,232,255,.05)}
[data-world="deep"] .k-frame::before,[data-world="deep"] .k-frame::after{content:"";position:absolute;width:20px;height:20px;border:2px solid var(--k-acc)}
[data-world="deep"] .k-frame::before{left:-1px;top:-1px;border-right:0;border-bottom:0}[data-world="deep"] .k-frame::after{right:-1px;bottom:-1px;border-left:0;border-top:0}
.k-cap{position:absolute;top:8px;left:50%;transform:translateX(-50%);font-family:'Rajdhani';font-size:11px;letter-spacing:.2em;color:var(--k-ink2)}
.k-text{font-family:'Nunito',sans-serif;font-weight:800;font-size:clamp(24px,min(3.5vw,5.6vh),44px);letter-spacing:.05em;line-height:1.45;text-align:center;word-break:break-word}
[data-world="deep"] .k-text{font-family:'Inter';font-weight:600;letter-spacing:.03em}
.k-text span{border-radius:6px;transition:color .12s}
.k-text .done{color:var(--k-done)}.k-text .todo{color:var(--k-todo)}.k-text .miss{color:var(--k-miss)}
.k-text .cur{background:var(--k-cur-bg);box-shadow:inset 0 -4px 0 var(--k-cur-line);color:var(--k-ink)}
[data-world="space"] .k-text .done{text-shadow:0 0 12px rgba(61,232,255,.5)}
.k-hint{margin:clamp(4px,1.2vh,12px) 0 clamp(6px,1.4vh,14px);color:var(--k-ink2);font-weight:700;font-size:15.5px;min-height:24px;text-align:center}
.k-deck{display:flex;flex-direction:column;align-items:center;gap:6px;max-width:100%}
.k-kb{display:flex;flex-direction:column;gap:clamp(4px,.9vh,7px);padding:clamp(8px,1.6vh,14px);border-radius:calc(var(--k-r) + 2px);background:var(--k-panel);backdrop-filter:blur(var(--k-panel-blur));box-shadow:var(--k-shadow);max-width:100%}
.kbr{display:flex;gap:7px}.kbr-space{justify-content:center}
.kbk{height:clamp(38px,6.4vh,50px);min-width:clamp(38px,6.4vh,50px);border-radius:12px;display:grid;place-items:center;font-weight:900;font-size:17px;position:relative;transition:transform .08s;color:var(--k-ink);
  background:color-mix(in srgb,var(--fc) 28%,var(--k-kbase,#fff));box-shadow:inset 0 -3px 0 rgba(0,0,0,.1)}
.kbk-space{min-width:min(300px,50vw);font-size:13px;letter-spacing:.3em;text-transform:uppercase}
.kbk.dim{opacity:.32}.kbk.press{transform:translateY(2px);box-shadow:none}
.kbk.home::after{content:"";position:absolute;bottom:7px;width:12px;height:3px;border-radius:2px;background:currentColor;opacity:.45}
.kbk.next{outline:4px solid var(--k-ink);outline-offset:2px;transform:translateY(-2px);animation:knext 1.2s infinite}
@keyframes knext{50%{outline-color:color-mix(in srgb,var(--k-ink) 35%,transparent)}}
[data-world="space"] .kbk{--k-kbase:#14204F;border:1px solid color-mix(in srgb,var(--fc) 55%,transparent);box-shadow:inset 0 0 12px color-mix(in srgb,var(--fc) 15%,transparent);font-family:'JetBrains Mono',monospace}
[data-world="space"] .kbk{background:color-mix(in srgb,var(--fc) 14%,#0E1640);color:var(--fc)}
[data-world="space"] .kbk.next{background:var(--fc);color:#041026;outline:0;box-shadow:0 0 22px var(--fc),0 0 0 3px color-mix(in srgb,var(--fc) 35%,transparent)}
[data-world="deep"] .kbk{border-radius:0;font-family:'Rajdhani';font-size:19px;font-weight:600;color:#C8D0D4;background:linear-gradient(180deg,rgba(30,38,46,.92),rgba(14,18,23,.92));border:1px solid rgba(200,220,230,.14);box-shadow:none}
[data-world="deep"] .kbk::before{content:"";position:absolute;left:6px;right:6px;bottom:4px;height:2px;background:var(--fc);opacity:.75}
[data-world="deep"] .kbk.next{outline:0;color:#fff;border-color:var(--fc);background:linear-gradient(180deg,color-mix(in srgb,var(--fc) 45%,#0E1217),color-mix(in srgb,var(--fc) 18%,#0E1217));box-shadow:0 0 18px color-mix(in srgb,var(--fc) 60%,transparent)}
[data-world="deep"] .kbk.home::after{bottom:auto;top:6px;height:2px}
.k-handsbox{max-width:100%}.hands{display:block;width:min(620px,100%);height:auto}
.hands .fg{fill:rgba(0,0,0,.05);stroke:var(--k-line);stroke-width:1.5}.hands .palm{fill:none;stroke:var(--k-line)}
body[data-world="forest"] .hands .fg{fill:#FFE3C4;stroke:#F3C9A0}
.hands .fg.lit{fill:var(--fc);stroke:var(--fc);filter:drop-shadow(0 0 6px var(--fc))}
.k-meta{display:flex;gap:10px;margin-top:clamp(6px,1.4vh,14px);flex-wrap:wrap;justify-content:center}
.k-hidden{position:fixed;left:-9999px;top:0;opacity:0;width:1px;height:1px}
.k-confetti{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:60}
.k-confetti i{position:absolute;top:-20px;width:10px;height:14px;border-radius:3px;animation:kfall linear forwards}
@keyframes kfall{to{transform:translateY(105vh) rotate(540deg)}}

/* ---------- result ---------- */
.k-result{min-height:100vh;display:grid;grid-template-columns:1fr 1fr;align-items:center;gap:24px;padding:28px clamp(16px,4vw,60px);max-width:1200px;margin:0 auto}
.k-res-art{position:relative;aspect-ratio:1;max-width:500px;width:100%;justify-self:center;display:grid;place-items:center}
.k-res-art canvas{width:100%;height:100%}.k-res-art svg{animation:mbob 4s ease-in-out infinite}
.k-scan{position:absolute;inset:9%;border-radius:50%;border:1px solid rgba(92,200,224,.35);animation:kspin 18s linear infinite}
.k-scan::before{content:"";position:absolute;left:50%;top:-4px;width:8px;height:8px;background:var(--k-acc);box-shadow:0 0 10px var(--k-acc);transform:translateX(-50%)}
@keyframes kspin{to{transform:rotate(360deg)}}
.k-res-card{background:var(--k-panel);backdrop-filter:blur(var(--k-panel-blur));border-radius:calc(var(--k-r) + 6px);box-shadow:var(--k-shadow);padding:26px;max-width:540px}
.k-stars{font-size:38px;letter-spacing:8px;color:#FFC94A;filter:drop-shadow(0 0 8px rgba(255,201,74,.6))}
.k-eyebrow{display:block;font-family:'Rajdhani';font-weight:700;letter-spacing:.2em;text-transform:uppercase;font-size:12px;color:var(--k-good);margin-top:8px}
.k-res-card h1{font-size:clamp(30px,4vw,46px);margin:4px 0 2px;line-height:1.05}
.k-banner{margin:12px 0 0;padding:10px 14px;border-radius:calc(var(--k-r) - 6px);background:var(--k-acc);color:var(--k-acc-ink);font-weight:900}
.k-banner.soft{background:rgba(127,127,127,.15);color:var(--k-ink);font-weight:800}
.k-res-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:16px 0}
.k-res-stats>div{background:rgba(127,127,127,.1);border-radius:calc(var(--k-r) - 6px);padding:12px 8px;text-align:center}
.k-res-stats b{display:block;font-family:var(--k-head);font-size:32px;line-height:1.1}.k-res-stats small{font-weight:800;color:var(--k-ink2)}
.k-res-stats em{display:block;font-style:normal;font-size:12px;font-weight:800;color:var(--k-ink2)}.k-res-stats em.up{color:var(--k-good)}
.k-better{margin:4px 0 6px}.k-better h4{margin:0 0 8px;font-size:15px;font-weight:900;font-family:var(--k-body);letter-spacing:0}
.k-chips{display:flex;gap:8px;flex-wrap:wrap}.k-chips span{border:1.5px solid var(--k-good);color:var(--k-good);border-radius:10px;padding:4px 12px;font-weight:900}
.k-res-btns{display:flex;gap:10px;margin-top:18px;flex-wrap:wrap}.k-res-btns .k-go{flex:1;font-size:17px}

/* ---------- responsive ---------- */
@media (max-width:900px){
  .k-map{grid-template-columns:1fr;padding:0 12px}.k-mapbox{min-height:340px;height:55vw}.k-side{padding-bottom:96px}
  .k-top{padding:10px 12px}.k-chipbtn span{display:none}
  .k-cards{flex-direction:column;height:auto;min-height:0}.k-wcard{height:220px;flex:none}.k-wcard.on{flex:none;height:290px}
  .k-pick-foot{justify-content:center}.k-keys{display:none}.k-pick .k-go{width:100%}
  .k-ribbon{left:0;right:0;transform:none;border-radius:0;text-align:center;font-size:12.5px}.k-wcard:has(.k-ribbon) .k-picked{top:38px}.k-wcard:has(.k-ribbon) .k-wnum{top:38px}
  .k-result{grid-template-columns:1fr}.k-res-art{max-width:240px}
  .kbk{min-width:0;flex:1;height:40px;font-size:14px}.kbk-space{min-width:0;flex:none;width:55%}.kbr{gap:4px;margin-left:0!important}.k-kb{padding:8px;gap:4px;width:100%}.kbr-space{justify-content:center}
  .k-handsbox{display:none}.k-frame{padding:26px 16px 20px}
  .k-lesson{--lv:clamp(140px,26vh,240px)}
  .k-cta{flex-wrap:wrap;gap:10px;background:var(--k-panel);backdrop-filter:blur(14px);box-shadow:0 -8px 30px rgba(0,0,0,.25);padding:10px 14px calc(12px + env(safe-area-inset-bottom))}
  .k-cta:has(.k-cta-t) .k-cta-t,.k-cta-t{background:none;box-shadow:none;padding:0}.k-cta-t b{font-size:19px}.k-go{padding:13px 24px}
}
@media (max-height:820px) and (min-width:901px){.k-handsbox{display:none}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
.k-pill[hidden]{display:none}

@media (max-height:720px){.k-meta{display:none}.k-ship-rear{width:clamp(110px,24vh,200px)}}

/* ---------- discoveries (a short true story after each lesson) ---------- */
.k-disc{display:flex;gap:14px;align-items:flex-start;text-align:left;margin:14px 0 4px;padding:14px 16px;border-radius:var(--k-r);background:rgba(127,127,127,.12);border:1px solid var(--k-line)}
.k-disc-ico{font-size:40px;line-height:1;flex:none}
.k-disc-tag{display:inline-block;font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase;color:var(--k-acc);margin-bottom:2px}
body[data-world="forest"] .k-disc-tag{color:#B27F00}
.k-disc h4{margin:0 0 4px;font-size:20px}.k-disc p{margin:0;font-weight:700;font-size:15.5px;line-height:1.5;color:var(--k-ink2)}
body[data-world="deep"] .k-disc{border-radius:0;border-left:3px solid var(--k-acc)}
.k-gd-sub{margin:0 0 12px;font-weight:700;color:var(--k-ink2)}
.k-gdlist{list-style:none;margin:0;padding:0;max-height:min(56vh,460px);overflow:auto}
.k-gd{display:flex;gap:12px;padding:10px 0;border-top:1px solid rgba(127,127,127,.25)}.k-gd:first-child{border-top:0}
.k-gd .e{font-size:28px;flex:none;width:36px;text-align:center}.k-gd b{display:block;font-size:16px}.k-gd p{margin:2px 0 0;font-size:14.5px;line-height:1.45;opacity:.85}
.k-gd:not(.got){opacity:.5}
