:root{--bg-main: #0a0a0a;--bg-panel: #161616;--accent: #00e5ff;--error: #ff4b4b;--warn: #ffca28;--text-primary: #eee;--text-secondary: #888;--border: #2a2a2a}body{margin:0;background:var(--bg-main);color:var(--text-primary);font-family:Inter,sans-serif;overflow-y:auto;scroll-behavior:smooth}.step-row{display:flex;flex-direction:column;height:100dvh;background:var(--bg-panel);border-bottom:10px solid #000;overflow:hidden}.step-tabs{display:flex;gap:4px;padding:8px 12px;background:#1e1e1e;border-bottom:1px solid var(--border)}.tab-btn{padding:8px 16px;background:#2d2d2d;color:#888;border:none;border-radius:4px 4px 0 0;cursor:pointer;font-size:.8rem;font-family:Inter,sans-serif;transition:background .2s,color .2s}.tab-btn:hover{background:#3d3d3d;color:#aaa}.tab-btn.active{background:var(--bg-panel);color:var(--text-primary)}.step-row{display:flex;flex-direction:column;height:100dvh}.step-content{display:none;flex:1;min-height:0}.step-content.active{display:flex;flex-direction:column}.step-content>.code-side,.step-content>.canvas-side{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.code-side,.canvas-side{flex:1;display:flex;flex-direction:column;padding:.5rem;height:100%;box-sizing:border-box}.code-side{border-right:2px solid #000}.canvas-wrapper{flex:1;display:flex;min-height:0}.step-anchor{display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--text-primary);font-size:.7rem;text-transform:uppercase;margin-bottom:.5rem;transition:color .2s;width:fit-content}.step-anchor:hover{color:var(--accent)}.step-title{position:absolute;top:10px;left:10px;z-index:10;background:#0009;padding:6px 12px;border-radius:4px;font-size:.85rem;font-weight:600;margin-bottom:0;pointer-events:auto}.step-title:hover{background:#000c}.status-dot{width:8px;height:8px;border-radius:50%;background:#333}.is-running .status-dot{background:var(--accent);box-shadow:0 0 8px var(--accent);animation:pulse 2s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.editor-box{flex:1;background:#000;border:1px solid var(--border);border-radius:6px 6px 0 0;min-height:0;overflow-y:auto;padding:1rem;font-family:Fira Code,monospace;color:#d4d4d4;white-space:pre}.console-panel{flex:0 0 100px;background:#050505;border:1px solid var(--border);border-top:1px solid #333;border-radius:0 0 6px 6px;padding:8px;overflow-y:auto;font-family:monospace;font-size:.75rem}.log-entry.info{color:var(--accent);border-left:2px solid var(--accent);padding-left:5px}.canvas-box{flex:1;background:#000;border:1px solid var(--border);border-radius:6px;display:flex;justify-content:center;align-items:center;color:#333;min-height:200px;min-width:200px;overflow:hidden;padding:0!important}.canvas-wrapper{flex:1;display:flex;min-height:0;width:100%;height:100%}.canvas-box canvas{width:100%;height:100%;border-radius:6px;display:block}.controls{flex:0 0 auto;padding-top:1rem}.controls-row{display:flex;gap:10px}.spacer{flex:1}.icon-btn{background:#202020;color:var(--accent);border:1px solid var(--border);width:38px;height:38px;border-radius:6px;cursor:pointer;display:flex;justify-content:center;align-items:center}@media(max-width:1024px){.step-row{height:100dvh}.step-content{height:500px}}@media(min-width:769px){.fullscreen-btn{display:flex}}.tutorial-nav{display:flex;justify-content:center;align-items:center;gap:1rem;padding:.75rem;background:var(--bg-panel);border-bottom:1px solid var(--border)}.tutorial-nav span{font-size:.9rem;color:var(--text-secondary);min-width:60px;text-align:center}.tutorial-nav .icon-btn:disabled{opacity:.3;cursor:not-allowed}@media(max-width:768px){.step-row{height:100dvh;overflow:hidden}.step-content{flex-direction:column;height:100%;min-height:0}.code-side{display:none!important}.canvas-side{flex:1;width:100%}.canvas-wrapper,.canvas-box{min-height:0;height:100%}.canvas-box canvas{width:100%!important;height:100%!important;touch-action:none}.fullscreen-btn{display:none!important}}.learn-side{flex:1;display:flex;flex-direction:column;padding:1.5rem;overflow-y:auto}.learn-content{max-width:800px;line-height:1.6}.learn-content h2{margin:0 0 1rem;font-size:1.5rem;color:var(--accent);border-bottom:1px solid var(--border);padding-bottom:.5rem}.learn-content h3{margin:1.5rem 0 .75rem;font-size:1.1rem;color:var(--text-primary)}.learn-content p{margin:0 0 1rem;color:var(--text-secondary)}.learn-content ul,.learn-content ol{margin:0 0 1rem;padding-left:1.5rem;color:var(--text-secondary)}.learn-content li{margin-bottom:.5rem}.learn-content code{background:#1a1a1a;padding:.2rem .4rem;border-radius:3px;font-family:Fira Code,monospace;font-size:.9em;color:var(--accent)}.learn-content .concept{background:#00e5ff0d;border-left:3px solid var(--accent);padding:1rem;margin-bottom:1rem;border-radius:0 4px 4px 0}.learn-content .concept p{margin:0;color:var(--text-primary)}.learn-content .key-terms{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1rem}.learn-content .key-term{background:#2a2a2a;padding:.25rem .75rem;border-radius:20px;font-size:.85rem;color:var(--text-primary)}.learn-content .related{background:#1a1a1a;padding:1rem;border-radius:6px;margin-top:1.5rem}.learn-content .related h3{margin-top:0;font-size:.9rem;text-transform:uppercase;color:var(--text-secondary)}.learn-content .related a{color:var(--accent);text-decoration:none}.learn-content .related a:hover{text-decoration:underline}.tutorial-index{max-width:900px;margin:0 auto;padding:40px 20px}.tutorial-index-header{text-align:center;margin-bottom:50px}.tutorial-index-header h1{font-size:2.5rem;margin:0 0 10px;color:var(--text-primary)}.tutorial-index-header p{font-size:1.1rem;color:var(--text-secondary);margin:0}.tutorial-group{margin-bottom:50px}.tutorial-group h2{font-size:1.5rem;color:var(--accent);margin:0 0 5px}.tutorial-group-desc{color:var(--text-secondary);margin:0 0 20px}.tutorial-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:15px}.tutorial-card{display:flex;align-items:flex-start;gap:15px;padding:20px;background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;text-decoration:none;transition:border-color .2s,transform .2s}.tutorial-card:hover{border-color:var(--accent);transform:translateY(-2px)}.tutorial-num{flex-shrink:0;width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:var(--accent);color:#0a0a0a;font-weight:700;border-radius:6px}.tutorial-info h3{margin:0 0 5px;font-size:1rem;color:var(--text-primary)}.tutorial-info p{margin:0;font-size:.875rem;color:var(--text-secondary)}
