:root{--bg-primary:#0a0e17;--bg-secondary:#0f1729;--bg-card:rgba(15,23,42,0.8);--bg-glass:rgba(255,255,255,0.03);--text-primary:#e2e8f0;--text-secondary:#94a3b8;--text-muted:#64748b;--accent:#3b82f6;--accent-glow:rgba(59,130,246,0.3);--accent-secondary:#a855f7;--success:#10b981;--warning:#eab308;--danger:#ef4444;--border:rgba(255,255,255,0.06);--border-hover:rgba(255,255,255,0.12);--shadow:0 4px 24px rgba(0,0,0,0.4);--radius:12px;--radius-sm:8px;--font:"Inter",-apple-system,BlinkMacSystemFont,sans-serif;--transition:0.25s cubic-bezier(0.4,0,0.2,1)}[data-theme=light]{--bg-primary:#f1f5f9;--bg-secondary:#e2e8f0;--bg-card:rgba(255,255,255,0.85);--bg-glass:rgba(255,255,255,0.5);--text-primary:#0f172a;--text-secondary:#475569;--text-muted:#94a3b8;--accent:#2563eb;--accent-glow:rgba(37,99,235,0.2);--accent-secondary:#7c3aed;--success:#059669;--warning:#ca8a04;--danger:#dc2626;--border:rgba(0,0,0,0.08);--border-hover:rgba(0,0,0,0.15);--shadow:0 4px 24px rgba(0,0,0,0.1)}*,::after,::before{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-text-size-adjust:100%}body{font-family:var(--font);background:var(--bg-primary);color:var(--text-primary);line-height:1.6;min-height:100vh;overflow-x:hidden;transition:background var(--transition),color var(--transition)}#app{max-width:1200px;margin:0 auto;padding:16px;position:relative}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.loading-skeleton{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:80px 20px;min-height:400px}.skeleton-spinner{width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:sk-spin .8s linear infinite}@keyframes sk-spin{to{transform:rotate(360deg)}}.skeleton-bar{height:14px;border-radius:7px;background:var(--border);position:relative;overflow:hidden}.skeleton-bar::after{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,var(--bg-glass),transparent);animation:sk-shimmer 1.5s infinite}@keyframes sk-shimmer{to{left:100%}}.error-boundary{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:80px 20px;min-height:400px;text-align:center}.error-boundary .error-icon{font-size:48px}.error-boundary h2{color:var(--danger);font-size:20px}.error-boundary p{color:var(--text-secondary);max-width:400px}#diagram-container{display:flex;flex-direction:column;gap:16px}.diagram-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:20px 24px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);backdrop-filter:blur(12px)}.header-title h1{font-size:22px;font-weight:700;letter-spacing:-.3px}.header-subtitle{font-size:13px;color:var(--text-secondary);margin-top:2px}.header-controls{display:flex;gap:8px;flex-shrink:0}.ctrl-btn{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:8px 16px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-glass);color:var(--text-primary);font-family:var(--font);font-size:14px;cursor:pointer;transition:all var(--transition);user-select:none;text-decoration:none;line-height:1}.ctrl-btn:hover{background:var(--border);border-color:var(--border-hover)}.ctrl-btn:active{transform:scale(.97)}.theme-btn{font-size:20px;width:44px;padding:0}.primary-btn{background:var(--accent);color:#fff;border-color:var(--accent);font-weight:600}.primary-btn:hover{filter:brightness(1.15)}.speed-control{display:flex;align-items:center;gap:12px;padding:12px 20px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:13px;color:var(--text-secondary)}.speed-control input[type=range]{flex:1;max-width:200px;height:6px;-webkit-appearance:none;background:var(--border);border-radius:3px;outline:none}.speed-control input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--accent);cursor:pointer;border:2px solid var(--bg-card)}#speed-label{font-weight:600;color:var(--accent);min-width:48px;display:inline-block}.visualization{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);min-height:400px;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;transition:background var(--transition)}.viz-svg{width:100%;height:auto;display:block;max-height:600px}.viz-svg .node-bg{transition:fill var(--transition),stroke var(--transition);cursor:pointer}.viz-svg .node-bg:hover{filter:brightness(1.3)}.viz-svg .node.active .node-bg{stroke-width:2.5;filter:drop-shadow(0 0 8px var(--accent-glow))}.info-panel{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);max-width:480px;width:90%;max-height:80vh;overflow-y:auto;padding:28px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);backdrop-filter:blur(20px);box-shadow:var(--shadow);z-index:100;animation:panelIn .3s ease-out}@keyframes panelIn{from{opacity:0;transform:translate(-50%,-50%) scale(.95)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.info-close{position:absolute;top:12px;right:12px;width:36px;min-width:36px;min-height:36px;padding:0}.info-panel h3{font-size:18px;font-weight:700;margin-bottom:8px;padding-right:32px}.info-panel p{font-size:14px;color:var(--text-secondary);line-height:1.7}.info-analogy,.info-detail{margin-top:12px;padding:12px;background:var(--bg-glass);border-radius:var(--radius-sm);font-size:13px}.info-analogy{color:var(--accent-secondary);border-left:3px solid var(--accent-secondary)}.info-detail{color:var(--text-secondary)}.challenge-section{padding:24px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius)}.challenge-section h2{font-size:16px;font-weight:700;margin-bottom:16px;color:var(--accent)}.quiz-card{padding:16px;margin-bottom:12px;background:var(--bg-glass);border:1px solid var(--border);border-radius:var(--radius-sm)}.quiz-card .q-text{font-size:14px;font-weight:500;margin-bottom:10px}.quiz-options{display:flex;flex-direction:column;gap:8px}.quiz-option{display:flex;align-items:center;gap:10px;padding:12px 16px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-glass);cursor:pointer;font-size:13px;transition:all var(--transition);min-height:44px}.quiz-option:hover{border-color:var(--accent);background:rgba(59,130,246,0.05)}.quiz-option.selected{border-color:var(--accent);background:rgba(59,130,246,0.1)}.quiz-option.correct{border-color:var(--success);background:rgba(16,185,129,0.1)}.quiz-option.wrong{border-color:var(--danger);background:rgba(239,68,68,0.1)}.quiz-option .indicator{width:20px;height:20px;border-radius:50%;border:2px solid var(--border);flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:11px;transition:all var(--transition)}.quiz-option.selected .indicator{border-color:var(--accent);background:var(--accent);color:#fff}.quiz-option.correct .indicator{border-color:var(--success);background:var(--success);color:#fff}.quiz-option.wrong .indicator{border-color:var(--danger);background:var(--danger);color:#fff}.challenge-progress{display:flex;gap:6px;margin-bottom:16px;flex-wrap:wrap}.challenge-dot{width:24px;height:24px;border-radius:50%;border:2px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;transition:all var(--transition)}.challenge-dot.done{border-color:var(--success);background:rgba(16,185,129,0.1);color:var(--success)}.challenge-dot.active{border-color:var(--accent);background:rgba(59,130,246,0.1);color:var(--accent)}.challenge-dot.wrong{border-color:var(--danger);background:rgba(239,68,68,0.1);color:var(--danger)}.challenge-result{font-size:13px;margin-top:8px;padding:8px 12px;border-radius:6px}.challenge-result.correct{background:rgba(16,185,129,0.1);color:var(--success)}.challenge-result.wrong{background:rgba(239,68,68,0.1);color:var(--danger)}.completion-overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.7);backdrop-filter:blur(8px);z-index:200;animation:fadeIn .3s}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.completion-card{text-align:center;padding:40px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);max-width:400px;width:90%;box-shadow:var(--shadow)}.completion-icon{font-size:64px;margin-bottom:16px;animation:bounce .6s}@keyframes bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-16px)}}.completion-card h2{font-size:24px;margin-bottom:8px;color:var(--success)}.completion-card p{color:var(--text-secondary);margin-bottom:24px}.diagram-footer{text-align:center;padding:16px;font-size:12px;color:var(--text-muted);border-top:1px solid var(--border);margin-top:8px}@media(max-width:768px){#app{padding:10px}.diagram-header{flex-direction:column;padding:16px}.header-title h1{font-size:18px}.header-controls{align-self:flex-end}.visualization{min-height:300px}.info-panel{width:95%;padding:20px;max-height:85vh}.challenge-section{padding:16px}.quiz-option{padding:10px 14px;font-size:12px}}@media(max-width:480px){#app{padding:6px}.diagram-header{padding:12px;gap:8px}.header-title h1{font-size:16px}.header-subtitle{font-size:12px}.visualization{min-height:240px;border-radius:8px}.speed-control{flex-wrap:wrap;padding:10px 14px;font-size:12px}.speed-control input[type=range]{max-width:140px}.info-panel{padding:16px;font-size:13px}.challenge-section{padding:12px}.quiz-card{padding:12px}.completion-card{padding:24px}.completion-icon{font-size:48px}.ctrl-btn{min-width:40px;min-height:40px;font-size:13px}}@media(prefers-reduced-motion){*,::after,::before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.completion-card .completion-icon{animation:none}.info-panel{animation:none}}