*{box-sizing:border-box;margin:0;padding:0}body{background:#f0f9ff;min-height:100vh;font-family:Segoe UI,system-ui,sans-serif}#root{flex-direction:column;height:100vh;display:flex}.app{flex-direction:column;height:100vh;display:flex;overflow:hidden}.app-header{color:#fff;background:linear-gradient(135deg,#6366f1,#8b5cf6);flex-shrink:0;align-items:center;gap:10px;padding:10px 20px;display:flex;box-shadow:0 2px 8px #0003}.app-header .logo{font-size:28px}.app-header h1{letter-spacing:-.5px;color:#fff;margin:0;font-size:26px;font-weight:800}.app-header .tagline{opacity:.85;margin-left:4px;font-size:14px}.header-stars{letter-spacing:2px;margin-left:auto;font-size:18px}.app-main{flex:1;gap:0;display:flex;overflow:hidden}.left-panel{background:#1e1e2e;border-right:2px solid #312e81;flex-direction:column;flex-shrink:0;width:340px;min-width:280px;display:flex;overflow-y:auto}.code-panel{flex-direction:column;flex:1;display:flex}.editor-section{flex-direction:column;flex:1;min-height:200px;display:flex}.editor-header{color:#a78bfa;text-transform:uppercase;letter-spacing:.05em;background:#16162a;padding:8px 12px;font-size:12px;font-weight:600}.code-editor{resize:none;color:#cdd6f4;tab-size:2;background:#1e1e2e;border:none;outline:none;flex:1;min-height:200px;padding:12px;font-family:Fira Code,Cascadia Code,ui-monospace,monospace;font-size:15px;line-height:1.6}.code-editor::placeholder{color:#585b70}.button-row{background:#16162a;border-top:1px solid #312e81;gap:8px;padding:10px 12px;display:flex}.btn{cursor:pointer;border:none;border-radius:8px;flex:1;padding:10px 0;font-size:15px;font-weight:700;transition:transform .1s,opacity .2s}.btn:hover:not(:disabled){transform:translateY(-1px)}.btn:active:not(:disabled){transform:translateY(0)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-run{color:#fff;background:linear-gradient(135deg,#22c55e,#16a34a)}.btn-stop{color:#fff;background:linear-gradient(135deg,#ef4444,#dc2626)}.btn-reset{color:#fff;background:linear-gradient(135deg,#f59e0b,#d97706)}.log-section{border-top:1px solid #312e81;flex-direction:column;max-height:140px;display:flex}.log-header{color:#a78bfa;text-transform:uppercase;letter-spacing:.05em;background:#16162a;flex-shrink:0;padding:6px 12px;font-size:11px;font-weight:700}.log-body{flex:1;padding:6px 12px;font-size:13px;line-height:1.7;overflow-y:auto}.log-empty{color:#585b70;font-style:italic}.log-error{color:#f38ba8;word-break:break-word;font-size:12px}.log-line{color:#a6e3a1}.cheat-sheet{border-top:2px solid #312e81;flex-shrink:0}.cheat-header{color:#a78bfa;text-transform:uppercase;letter-spacing:.05em;background:#16162a;padding:8px 12px;font-size:12px;font-weight:700}.cheat-list{padding:6px 12px 10px}.cheat-row{border-bottom:1px solid #2a2a40;align-items:baseline;gap:8px;padding:3px 0;display:flex}.cheat-row:last-child{border-bottom:none}.cheat-cmd{color:#89dceb;white-space:nowrap;flex-shrink:0;font-family:Fira Code,ui-monospace,monospace;font-size:12px}.cheat-desc{color:#7f849c;font-size:12px}.example-tabs{background:#16162a;border-bottom:1px solid #312e81;gap:4px;padding:8px 10px 0;display:flex}.example-tab{cursor:pointer;color:#7f849c;background:#2a2a40;border:none;border-radius:6px 6px 0 0;padding:6px 12px;font-size:12px;font-weight:700;transition:background .15s,color .15s}.example-tab:hover{color:#cdd6f4;background:#363650}.example-tab.active{color:#a78bfa;background:#1e1e2e;border-bottom:2px solid #a78bfa}.right-panel,.dog-world-wrapper{flex-direction:column;flex:1;display:flex;overflow:hidden}.context-bar{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#ffffffbf;border-bottom:2px solid #fff6;flex-shrink:0;align-items:center;gap:16px;padding:8px 16px;font-size:14px;display:flex}.context-item{align-items:center;gap:6px;display:flex}.context-label{text-transform:uppercase;letter-spacing:.06em;color:#6366f1;font-size:11px;font-weight:700}.context-value{color:#1e1e2e;font-size:14px}.context-value code{color:#4338ca;background:#e0e7ff;border-radius:4px;padding:1px 5px;font-size:13px}.context-divider{background:#c7d2fe;width:1px;height:20px}.context-hint{color:#6366f1;opacity:.7;margin-left:auto;font-size:12px;font-style:italic}.dog-world{background:linear-gradient(#87ceeb 0%,#b8e4f9 65%,#c8eefd 100%);flex:1;min-height:0;position:relative;overflow:hidden}.sky{pointer-events:none;position:absolute;inset:0 0 80px}.decoration{opacity:.85;-webkit-user-select:none;user-select:none;font-size:36px;position:absolute}.sun{font-size:48px;animation:4s ease-in-out infinite sun-pulse;top:16px;right:40px}.cloud-1{animation:20s linear infinite cloud-drift;top:20px;left:15%}.cloud-2{opacity:.6;font-size:28px;animation:30s linear infinite cloud-drift;top:50px;left:40%}.ground{background:#4ade80;height:80px;position:absolute;bottom:0;left:0;right:0}.ground-strip{background:#22c55e;border-top:3px solid #16a34a;height:16px}.dog-position{flex-direction:column;align-items:center;display:flex;position:absolute;bottom:80px}.dog{-webkit-user-select:none;user-select:none;filter:drop-shadow(2px 4px 6px #0003);font-size:64px;line-height:1;display:block}.dog--idle{animation:2.5s ease-in-out infinite dog-idle}.dog--walking{animation:.35s ease-in-out infinite dog-walk}.dog--jumping{animation:.75s ease-in-out forwards dog-jump}.dog--spinning{animation:.8s ease-in-out forwards dog-spin}.dog--sitting{animation:.3s ease-out forwards dog-sit}.speech-bubble{color:#1e1e2e;white-space:nowrap;white-space:normal;text-align:center;background:#fff;border:2px solid #e0e0ff;border-radius:16px;max-width:240px;padding:8px 14px;font-size:15px;font-weight:600;animation:.2s ease-out bubble-pop;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);box-shadow:0 4px 12px #00000026}.speech-bubble:after{content:"";border:8px solid #0000;border-top-color:#fff;margin-top:-1px;position:absolute;top:100%;left:50%;transform:translate(-50%)}@keyframes dog-idle{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes dog-walk{0%,to{transform:translateY(0)}50%{transform:translateY(-7px)}}@keyframes dog-jump{0%{transform:translateY(0)scaleX(1)scaleY(1)}15%{transform:translateY(4px)scaleX(1.15)scaleY(.8)}40%{transform:translateY(-90px)scaleX(.95)scaleY(1.05)}60%{transform:translateY(-90px)scaleX(.95)scaleY(1.05)}85%{transform:translateY(4px)scaleX(1.15)scaleY(.8)}to{transform:translateY(0)scaleX(1)scaleY(1)}}@keyframes dog-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes dog-sit{0%{transform:translateY(0)scaleY(1)}to{transform:translateY(8px)scaleY(.85)}}@keyframes bubble-pop{0%{opacity:0;transform:translate(-50%)scale(.7)}to{opacity:1;transform:translate(-50%)scale(1)}}@keyframes sun-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.08)}}@keyframes cloud-drift{0%{transform:translate(0)}to{transform:translate(120px)}}.challenge-card{color:#fff;background:linear-gradient(135deg,#312e81,#4c1d95);border-bottom:2px solid #6d28d9;flex-shrink:0;padding:12px 14px}.challenge-card-header{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.challenge-num{text-transform:uppercase;letter-spacing:.06em;opacity:.8;font-size:11px;font-weight:700}.challenge-category{background:#ffffff26;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600}.challenge-progress-dots{gap:5px;margin-bottom:10px;display:flex}.challenge-dot{background:#ffffff40;border-radius:50%;width:8px;height:8px;transition:background .3s}.challenge-dot.done{background:#22c55e}.challenge-dot.active{background:#fbbf24;box-shadow:0 0 6px #fbbf24}.challenge-title-row{align-items:center;gap:8px;margin-bottom:6px;display:flex}.challenge-emoji{font-size:22px}.challenge-title{font-size:17px;font-weight:800}.challenge-desc{opacity:.85;margin:0 0 8px;font-size:13px;line-height:1.5}.hint-btn{color:#fff;cursor:pointer;background:#ffffff1a;border:1px solid #ffffff4d;border-radius:6px;padding:4px 10px;font-size:12px;transition:background .15s}.hint-btn:hover{background:#fff3}.challenge-hint{color:#a5f3fc;white-space:pre-wrap;background:#0000004d;border-radius:6px;margin-top:8px;padding:8px 10px;font-family:Fira Code,ui-monospace,monospace;font-size:12px;line-height:1.6}.challenge-all-done{justify-content:center;align-items:center;display:flex}.challenge-all-done-inner{text-align:center;padding:4px 0}.challenge-all-done-inner div{font-size:32px}.challenge-all-done-inner strong{color:#fbbf24;margin:4px 0 2px;font-size:15px;display:block}.challenge-all-done-inner p{opacity:.7;margin:0;font-size:12px}.fail-flash{outline:2px solid #ef4444;animation:.5s fail-shake}@keyframes fail-shake{0%,to{transform:translate(0)}20%{transform:translate(-6px)}40%{transform:translate(6px)}60%{transform:translate(-4px)}80%{transform:translate(4px)}}.success-overlay{z-index:100;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#0000008c;justify-content:center;align-items:center;animation:.3s overlay-in;display:flex;position:fixed;inset:0}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}.success-card{text-align:center;z-index:1;background:#fff;border-radius:24px;width:90%;max-width:360px;padding:36px 44px;animation:.4s cubic-bezier(.34,1.56,.64,1) card-pop;position:relative;box-shadow:0 24px 64px #00000059}@keyframes card-pop{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}.success-big-emoji{font-size:64px;animation:.6s .3s both bounce-emoji}@keyframes bounce-emoji{0%{transform:scale(0)rotate(-20deg)}to{transform:scale(1)rotate(0)}}.success-title{color:#312e81;margin:8px 0 4px;font-size:26px;font-weight:900}.success-challenge-name{color:#6366f1;margin-bottom:12px;font-size:16px;font-weight:700}.success-stars{letter-spacing:6px;margin-bottom:6px;font-size:28px;animation:.4s .5s both stars-in}@keyframes stars-in{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}.success-progress{color:#9ca3af;margin-bottom:20px;font-size:13px}.btn-next{cursor:pointer;color:#fff;background:linear-gradient(135deg,#6366f1,#8b5cf6);border:none;border-radius:12px;width:100%;padding:14px 0;font-size:16px;font-weight:800;transition:transform .15s}.btn-next:hover{transform:translateY(-2px)}.success-skip{color:#d1d5db;margin-top:12px;font-size:11px}.confetti-canvas{pointer-events:none;z-index:99;width:100%;height:100%;position:fixed;inset:0}
