:root{--primary: #326ce5;--bg-dark: #1a1a1a;--bg-light: #f5f7fa;--text-main: #333;--text-muted: #666;--border: #ddd;--terminal-bg: #0d0d0d;--success: #28a745;--error: #dc3545;--warning: #ffc107}*{box-sizing:border-box;margin:0;padding:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}body{height:100vh;display:flex;flex-direction:column;overflow:hidden;background-color:var(--bg-light);transition:filter .3s ease}header{height:60px;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 20px;box-shadow:0 2px 5px #0000001a;z-index:100}.logo{font-size:1.5rem;font-weight:700;display:flex;align-items:center;gap:10px}.logo svg{width:32px;height:32px;fill:#fff}main{flex:1;display:grid;grid-template-columns:280px 1fr 350px;overflow:hidden}#curriculum{background:#fff;border-right:1px solid var(--border);overflow-y:auto;padding:20px 0;display:flex;flex-direction:column}.course-item{padding:12px 20px;cursor:pointer;transition:all .2s;border-left:4px solid transparent;font-size:.9rem}.course-item:hover{background:#f0f4ff}.course-item.active{background:#e6eeff;border-left-color:var(--primary);font-weight:600;color:var(--primary)}.course-category{padding:10px 20px;font-size:.75rem;text-transform:uppercase;color:var(--text-muted);letter-spacing:1px;margin-top:15px}#viewport{position:relative;display:flex;flex-direction:column;background:#eef2f7}#canvas-container{flex:1;position:relative;overflow:hidden}canvas{display:block;width:100%;height:100%}.canvas-overlay{position:absolute;top:20px;left:20px;background:#ffffffe6;padding:15px;border-radius:8px;box-shadow:0 4px 12px #0000001a;max-width:300px;pointer-events:none}#lab-panel{background:#fff;border-left:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}.panel-header{padding:12px 15px;background:#f8f9fa;border-bottom:1px solid var(--border);font-weight:600;font-size:.85rem;display:flex;justify-content:space-between;align-items:center}#editor-container{flex:1;display:flex;flex-direction:column}textarea{flex:1;border:none;padding:15px;font-family:Fira Code,Courier New,monospace;font-size:.85rem;line-height:1.5;resize:none;background:#fafafa;color:#333;outline:none}#terminal{height:250px;background:var(--terminal-bg);color:#0f0;padding:15px;font-family:Fira Code,monospace;font-size:.8rem;overflow-y:auto;border-top:4px solid #333}.term-line{margin-bottom:4px;display:flex}.term-prompt{color:#0f0;margin-right:8px;font-weight:700}.term-input{background:transparent;border:none;color:#fff;flex:1;outline:none}footer{height:50px;background:#fff;border-top:1px solid var(--border);display:flex;align-items:center;padding:0 20px;gap:20px}.btn{padding:6px 12px;border-radius:4px;border:1px solid var(--border);background:#fff;cursor:pointer;font-size:.85rem;display:flex;align-items:center;gap:6px;transition:background .2s}.btn:hover{background:#f0f0f0}.btn-primary{background:var(--primary);color:#fff;border-color:var(--primary)}.btn-primary:hover{background:#2a5bbd}#tooltip{position:fixed;background:#000c;color:#fff;padding:8px 12px;border-radius:4px;font-size:.75rem;pointer-events:none;display:none;z-index:1000}.status-badge{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px}.status-running{background:var(--success);box-shadow:0 0 5px var(--success)}.status-pending{background:var(--warning);animation:pulse 1s infinite}@keyframes pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0006;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);display:none;justify-content:center;align-items:center;z-index:2000;opacity:0;transition:opacity .3s ease}.modal-overlay.active{display:flex;opacity:1}.modal-content{background:#ffffffd9;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);padding:30px;border-radius:16px;width:400px;box-shadow:0 10px 40px #0003;border:1px solid rgba(255,255,255,.5);transform:translateY(-20px);transition:transform .3s ease}.modal-overlay.active .modal-content{transform:translateY(0)}
