.app-header{position:fixed;top:0;left:0;right:0;height:var(--header-height);display:flex;align-items:center;justify-content:space-between;padding:0 2rem;background:linear-gradient(135deg,var(--color-primary) 0%,var(--color-primary-dark) 100%);color:#fff;box-shadow:var(--shadow-md);z-index:100}.header-left{display:flex;align-items:center;gap:1rem}.sidebar-toggle{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);border-radius:8px;color:#fff;font-size:.875rem;transition:all var(--transition-fast)}.sidebar-toggle:hover{background:#fff3}.header-title h1{font-size:1.375rem;font-weight:600;margin:0;line-height:1.3}.header-subtitle{font-size:.875rem;opacity:.85;margin:0}.header-right{display:flex;align-items:center;gap:2rem}.header-meta{display:flex;gap:1.5rem}.meta-item{display:flex;align-items:center;gap:.5rem;font-size:.875rem;opacity:.9}.meta-icon{font-size:1rem}.theme-selector{position:relative;display:flex;align-items:center}.theme-icon{position:absolute;left:10px;font-size:1rem;pointer-events:none;z-index:1}.theme-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);border-radius:8px;color:#fff;font-size:.875rem;font-family:inherit;padding:.5rem 2rem .5rem 2.25rem;cursor:pointer;transition:all var(--transition-fast);min-width:140px}.theme-select:hover{background:#fff3}.theme-select:focus{outline:none;box-shadow:0 0 0 2px #ffffff4d}.theme-select option{background:var(--color-bg-secondary);color:var(--color-text);padding:.5rem}.progress-container{display:flex;flex-direction:column;align-items:flex-end;gap:.375rem}.progress-bar{width:180px;height:6px;background:#fff3;border-radius:3px;overflow:hidden}.progress-fill{height:100%;background:var(--color-accent);border-radius:3px;transition:width var(--transition-normal)}.progress-text{font-size:.75rem;opacity:.85}@media (max-width: 1024px){.header-meta{display:none}}@media (max-width: 768px){.app-header{padding:0 .75rem}.header-left,.header-right{gap:.5rem}.sidebar-toggle{width:44px;height:44px}.theme-select{min-height:44px;min-width:120px;font-size:.8125rem;padding:.5rem 1.5rem .5rem 2rem}.header-title h1{font-size:1rem;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-subtitle{display:none}.progress-bar{width:80px}.progress-text{font-size:.6875rem}}@media (max-width: 480px){.header-title h1{max-width:100px;font-size:.9375rem}.progress-container{display:none}}.sidebar-backdrop{display:none}@media (max-width: 1024px){.sidebar-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;top:var(--header-height);background:#00000080;z-index:35;animation:fadeIn var(--transition-fast)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}}.sidebar{position:fixed;top:var(--header-height);left:0;bottom:0;width:var(--sidebar-width);background:var(--color-bg-white);border-right:1px solid var(--color-border);overflow-y:auto;transition:transform var(--transition-normal);z-index:40}.sidebar.closed{transform:translate(-100%)}.sidebar-controls{display:flex;gap:.5rem;padding:.75rem 1rem;border-bottom:1px solid var(--color-border)}.sidebar-control-btn{padding:.375rem .625rem;border:1px solid var(--color-border);border-radius:4px;background:var(--color-bg-white);color:var(--color-text-secondary);font-size:.875rem;cursor:pointer;transition:all var(--transition-fast)}.sidebar-control-btn:hover{background:var(--color-bg-secondary);color:var(--color-text);border-color:var(--color-text-muted)}.sidebar-nav{padding:.5rem 0}.nav-list{list-style:none}.nav-item{margin:0}.nav-item.depth-0>.nav-link,.nav-item.depth-0>.nav-group{padding-left:1rem}.nav-item.depth-1>.nav-link,.nav-item.depth-1>.nav-group{padding-left:2rem}.nav-item.depth-2>.nav-link,.nav-item.depth-2>.nav-group{padding-left:3rem}.nav-item.depth-3>.nav-link,.nav-item.depth-3>.nav-group{padding-left:4rem}.nav-link{display:flex;align-items:center;gap:.75rem;width:100%;padding:.625rem 1rem;border:none;background:none;font-size:.9375rem;color:var(--color-text);text-align:left;cursor:pointer;transition:all var(--transition-fast)}.nav-link:hover{background:var(--color-bg-secondary)}.nav-link.active{background:linear-gradient(90deg,rgba(59,130,246,.1) 0%,transparent 100%);color:var(--color-primary-light);font-weight:500}.nav-link.completed,.nav-link.completed .nav-status{color:var(--color-accent)}.nav-status{flex-shrink:0;width:1.25rem;font-size:.75rem;color:var(--color-text-muted)}.nav-title{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nav-bookmark{flex-shrink:0;color:#f59e0b;font-size:.875rem}.nav-group{display:flex;align-items:center;gap:.5rem;width:100%;padding:.75rem 1rem;border:none;background:none;font-size:.8125rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.025em;cursor:pointer;text-align:left;transition:all var(--transition-fast)}.nav-group:hover{background:var(--color-bg-secondary);color:var(--color-text)}.nav-group-arrow{font-size:.75rem;transition:transform var(--transition-fast);color:var(--color-text-muted)}.nav-group-arrow.expanded{transform:rotate(90deg)}.nav-children{border-left:2px solid var(--color-border);margin-left:1.5rem}@media (max-width: 1024px){.sidebar{box-shadow:var(--shadow-lg)}}@media (max-width: 768px){.nav-link{padding:.75rem 1rem;min-height:44px}.nav-group{padding:.875rem 1rem;min-height:44px}.sidebar-control-btn{padding:.5rem .75rem;min-height:44px;font-size:1rem}.sidebar-controls{padding:.5rem}}@media (max-width: 480px){.sidebar{width:100%}}.mermaid-container{margin:1.5rem 0;padding:1.5rem;background:var(--color-bg-white);border:1px solid var(--color-border);border-radius:8px;overflow-x:auto;display:flex;justify-content:center}.mermaid-container svg{max-width:100%;height:auto}.mermaid-error{margin:1.5rem 0;padding:1rem 1.25rem;background:#fef2f2;border:1px solid #fecaca;border-left:4px solid #ef4444;border-radius:0 8px 8px 0;color:#991b1b}.mermaid-error .error-icon{margin-right:.5rem}.mermaid-error .mermaid-source{margin-top:1rem;padding:.75rem;background:#0000000d;border-radius:4px;font-family:var(--font-mono);font-size:.8125rem;overflow-x:auto;white-space:pre-wrap;color:#7f1d1d}@media (max-width: 768px){.mermaid-container{padding:1rem}}.code-block-wrapper{margin:1.5rem 0;border-radius:8px;overflow:hidden;border:1px solid var(--color-border);background:#282c34}.code-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;background:#21252b;border-bottom:1px solid #181a1f}.code-language{font-family:var(--font-mono);font-size:.75rem;font-weight:500;color:#abb2bf;text-transform:uppercase;letter-spacing:.05em}.copy-button{padding:.25rem .75rem;background:transparent;border:1px solid #3e4451;border-radius:4px;font-family:var(--font-sans);font-size:.75rem;color:#abb2bf;cursor:pointer;transition:all var(--transition-fast)}.copy-button:hover{background:#3e4451;color:#e5e5e5}.copy-button:active{transform:scale(.98)}.code-content{margin:0!important;padding:1rem!important;font-size:.875rem!important;line-height:1.6!important;background:#282c34!important}.code-content code{font-family:var(--font-mono)!important}.code-content .linenumber{min-width:2.5em!important;padding-right:1em!important;color:#5c6370!important;text-align:right!important;-webkit-user-select:none;user-select:none}.code-content::-webkit-scrollbar{height:8px}.code-content::-webkit-scrollbar-track{background:#21252b}.code-content::-webkit-scrollbar-thumb{background:#3e4451;border-radius:4px}.code-content::-webkit-scrollbar-thumb:hover{background:#4b5263}@media (max-width: 768px){.code-header{padding:.375rem .75rem}.code-content{padding:.75rem!important;font-size:.8125rem!important}}.editor-block{margin:1.5rem 0;border-radius:8px;overflow:hidden;border:1px solid #3e4451;background:#282c34}.editor-block-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;background:#21252b;border-bottom:1px solid #3e4451}.editor-block-language{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#61afef}.editor-block-id{font-size:.6875rem;color:#5c6370}.editor-block-container{min-height:300px}.tutor-block{margin:1.5rem 0;border-radius:8px;overflow:hidden;border:1px solid #065f46;background:#1e1e1e}.tutor-block-header{display:flex;justify-content:space-between;align-items:center;padding:.625rem 1rem;background:#065f46;color:#fff}.tutor-block-title{font-size:.875rem;font-weight:600}.tutor-block-ref{font-size:.6875rem;opacity:.8}.tutor-response{min-height:100px;max-height:300px;overflow-y:auto;padding:1rem;background:#252526;border-bottom:1px solid #333}.tutor-response pre{margin:0;font-family:system-ui,sans-serif;font-size:.875rem;line-height:1.6;white-space:pre-wrap;color:#d4d4d4}.tutor-placeholder{color:#5c6370;font-style:italic}.tutor-input-area{padding:.75rem 1rem;display:flex;flex-direction:column;gap:.75rem}.tutor-context-toggle{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:#888;cursor:pointer}.tutor-code-lines{color:#5c6370;margin-left:.25rem}.tutor-prompt-input{width:100%;padding:.75rem;font-size:.875rem;border:1px solid #444;border-radius:6px;background:#333;color:#fff;resize:vertical}.tutor-prompt-input:focus{outline:none;border-color:#10b981}.tutor-send-button{align-self:flex-end;padding:.625rem 1.25rem;font-size:.875rem;font-weight:600;background:#10b981;color:#fff;border:none;border-radius:6px;cursor:pointer}.tutor-send-button:hover:not(:disabled){background:#059669}.tutor-send-button:disabled{background:#4b5563;cursor:not-allowed}.output-block{margin:1.5rem 0;border-radius:8px;overflow:hidden;border:1px solid #444;background:#1e1e1e}.output-block--error{border-color:#ef4444}.output-block-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;background:#2d2d2d;font-size:.75rem;font-weight:600;text-transform:uppercase;color:#888}.output-block-ref{font-size:.6875rem;color:#5c6370}.output-block-content{padding:1rem;min-height:60px;max-height:250px;overflow-y:auto}.output-block-stdout{margin:0;font-family:Consolas,monospace;font-size:.8125rem;line-height:1.5;white-space:pre-wrap;color:#d4d4d4}.output-block-stderr{margin:.5rem 0 0;padding-top:.5rem;border-top:1px solid #3e4451;font-family:Consolas,monospace;font-size:.8125rem;line-height:1.5;white-space:pre-wrap;color:#fca5a5}.output-block-empty,.output-block-loading{color:#5c6370;font-style:italic}.run-button-block{display:inline-flex;align-items:center;gap:.5rem;margin:1rem 0;padding:.75rem 1.5rem;font-size:.9375rem;font-weight:600;background:#2563eb;color:#fff;border:none;border-radius:8px;cursor:pointer}.run-button-block:hover:not(:disabled){background:#1d4ed8}.run-button-block:disabled{cursor:not-allowed;opacity:.7}.run-button-block--running{background:#6b7280}/**
 * Copyright (c) 2014 The xterm.js authors. All rights reserved.
 * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
 * https://github.com/chjj/term.js
 * @license MIT
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * Originally forked from (with the author's permission):
 *   Fabrice Bellard's javascript vt100 for jslinux:
 *   http://bellard.org/jslinux/
 *   Copyright (c) 2011 Fabrice Bellard
 *   The original design remains. The terminal itself
 *   has been extended to include xterm CSI codes, among
 *   other features.
 */.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.terminal-block{margin:1.5rem 0;border-radius:8px;overflow:hidden;border:1px solid #3e4451;background:#1e1e1e}.terminal-block-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;background:#21252b;border-bottom:1px solid #3e4451}.terminal-block-shell{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#e5c07b}.terminal-block-id{font-size:.6875rem;color:#5c6370}.terminal-block-container{height:300px;padding:.5rem}.terminal-block-container .xterm{height:100%}.terminal-block-container .xterm-viewport{overflow-y:auto}.vscode-block{margin:1.5rem 0;border-radius:8px;overflow:hidden;border:1px solid #007acc;background:#1e1e1e}.vscode-block-header{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#007acc;color:#fff}.vscode-block-instance{font-size:.875rem;font-weight:600}.vscode-block-logical{font-size:.75rem;opacity:.8}.vscode-block-link{margin-left:auto;font-size:.75rem;color:#fff;text-decoration:none;opacity:.8}.vscode-block-link:hover{opacity:1}.vscode-block-frame{width:100%;height:600px;border:none;background:#1e1e1e}.repl{font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:14px;border-radius:8px;overflow:hidden;margin:1rem 0;box-shadow:0 2px 8px #0000001a}.repl-header{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#2d3748;color:#fff}.repl-title{font-weight:600;font-size:13px}.repl-id{font-size:11px;color:#a0aec0;margin-left:auto}.repl-reset{background:transparent;border:1px solid #4a5568;color:#a0aec0;width:28px;height:28px;border-radius:4px;cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;transition:all .2s}.repl-reset:hover{background:#4a5568;color:#fff}.repl-output{background:#1a202c;color:#e2e8f0;padding:1rem;min-height:150px;max-height:400px;overflow-y:auto;cursor:text}.repl-entry{margin-bottom:.5rem}.repl-input-line{display:flex;align-items:flex-start;gap:.5rem}.repl-prompt{color:#68d391;font-weight:600;flex-shrink:0;-webkit-user-select:none;user-select:none}.repl-input-text{color:#fff;word-break:break-all}.repl-output-line{margin-left:2.5rem;color:#a0aec0;white-space:pre-wrap;word-break:break-all}.repl-output-line pre{margin:0;font-family:inherit;font-size:inherit}.repl-error{color:#fc8181!important}.repl-current{margin-top:.5rem}.repl-input{flex:1;background:transparent;border:none;color:#fff;font-family:inherit;font-size:inherit;outline:none;padding:0;caret-color:#68d391}.repl-input::placeholder{color:#4a5568}.repl-loading-message{color:#a0aec0;display:flex;align-items:center;gap:.5rem}.repl-loading-message:before{content:"⏳"}.repl-javascript .repl-header{background:#f7df1e;color:#000}.repl-javascript .repl-id{color:#666}.repl-javascript .repl-reset{border-color:#0003;color:#666}.repl-javascript .repl-reset:hover{background:#0000001a;color:#000}.repl-javascript .repl-prompt{color:#f7df1e}.repl-sql .repl-header{background:#336791}.sql-prompt{color:#63b3ed!important}.sql-table{border-collapse:collapse;margin:.5rem 0;font-size:13px;width:100%;max-width:100%;overflow-x:auto;display:block}.sql-table th,.sql-table td{border:1px solid #4a5568;padding:.25rem .75rem;text-align:left}.sql-table th{background:#2d3748;color:#63b3ed;font-weight:600}.sql-table td{color:#e2e8f0}.sql-table tr:nth-child(2n) td{background:#ffffff05}.sql-empty{color:#718096;font-style:italic}.sql-result{margin-left:0!important;overflow-x:auto}.repl-nosql .repl-header{background:#4db33d}.nosql-prompt{color:#68d391!important}@media (prefers-color-scheme: dark){.repl{box-shadow:0 2px 8px #0000004d}}@media (max-width: 640px){.repl{font-size:12px}.repl-output{padding:.75rem;min-height:120px}.repl-output-line{margin-left:0;margin-top:.25rem}.sql-table{font-size:11px}.sql-table th,.sql-table td{padding:.25rem .5rem}}.debugger{border:1px solid var(--border-color, #ddd);border-radius:8px;overflow:hidden;margin:1rem 0;background:var(--bg-secondary, #f8f9fa);font-family:SF Mono,Fira Code,Consolas,monospace}.debugger-header{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#4a90d9;color:#fff;font-size:.85rem}.debugger-title{font-weight:600}.debugger-id{opacity:.7;font-size:.75rem}.debugger-layout{display:grid;grid-template-columns:1fr 280px;min-height:300px}@media (max-width: 768px){.debugger-layout{grid-template-columns:1fr}}.debugger-code-panel{display:flex;flex-direction:column;border-right:1px solid var(--border-color, #ddd)}.debugger-code{display:flex;flex:1;overflow:auto;background:#1e1e1e}.debugger-gutter{display:flex;flex-direction:column;background:#252526;color:#858585;padding:.5rem 0;-webkit-user-select:none;user-select:none;min-width:50px}.debugger-line-number{display:flex;align-items:center;justify-content:flex-end;padding:0 .5rem;height:1.5rem;font-size:.75rem;cursor:pointer;position:relative}.debugger-line-number:hover{background:#333}.debugger-line-number.current{background:#264f78;color:#fff}.breakpoint-marker{position:absolute;left:4px;width:10px;height:10px;border-radius:50%;background:#e51400}.current-marker{position:absolute;left:2px;width:0;height:0;border-left:8px solid #ffcc00;border-top:5px solid transparent;border-bottom:5px solid transparent}.debugger-editor{flex:1;padding:.5rem;font-family:inherit;font-size:.875rem;line-height:1.5rem;background:#1e1e1e;color:#d4d4d4;border:none;resize:none;outline:none;min-height:200px}.debugger-editor:disabled{opacity:.8}.debugger-controls{display:flex;gap:.5rem;padding:.5rem;background:#f0f0f0;border-top:1px solid var(--border-color, #ddd)}.debugger-controls button{padding:.4rem .8rem;font-size:.8rem;font-weight:500;border:none;border-radius:4px;cursor:pointer;transition:background .2s}.debugger-controls button:nth-child(1){background:#4caf50;color:#fff}.debugger-controls button:nth-child(1):hover:not(:disabled){background:#388e3c}.debugger-controls button:nth-child(2){background:#2196f3;color:#fff}.debugger-controls button:nth-child(2):hover:not(:disabled){background:#1976d2}.debugger-controls button:nth-child(3){background:#ff9800;color:#fff}.debugger-controls button:nth-child(3):hover:not(:disabled){background:#f57c00}.debugger-controls button:nth-child(4){background:#757575;color:#fff}.debugger-controls button:nth-child(4):hover:not(:disabled){background:#616161}.debugger-controls button:disabled{opacity:.5;cursor:not-allowed}.debugger-output{background:#1e1e1e;color:#d4d4d4;padding:.5rem;border-top:1px solid #333;max-height:100px;overflow-y:auto}.debugger-output .debugger-section-title{color:#858585;margin-bottom:.25rem}.debugger-output-line{font-size:.8rem;padding:.1rem 0}.debugger-error{background:#5a1d1d;color:#f48771;padding:.5rem;font-size:.8rem;border-top:1px solid #6e2929}.debugger-info-panel{display:flex;flex-direction:column;background:#252526;color:#d4d4d4;font-size:.8rem}.debugger-section{border-bottom:1px solid #3c3c3c}.debugger-section-title{padding:.5rem;background:#333;font-weight:600;font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:#ccc}.debugger-variables,.debugger-callstack{padding:.25rem;max-height:150px;overflow-y:auto}.debugger-empty{padding:.5rem;color:#858585;font-style:italic}.debugger-variable{display:grid;grid-template-columns:1fr auto auto;gap:.5rem;padding:.25rem .5rem;border-bottom:1px solid #3c3c3c}.debugger-variable:last-child{border-bottom:none}.var-name{color:#9cdcfe;font-weight:500}.var-type{color:#4ec9b0;font-size:.7rem;opacity:.7}.var-value{color:#ce9178;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.debugger-frame{padding:.25rem .5rem;border-bottom:1px solid #3c3c3c}.debugger-frame:last-child{border-bottom:none}.frame-line{color:#858585;font-size:.7rem}.debugger-status{padding:.5rem}.status-ready{color:#858585}.status-running{color:#4ec9b0}.status-finished{color:#608b4e}@media (prefers-color-scheme: dark){.debugger{border-color:#444}.debugger-controls{background:#2d2d2d;border-color:#444}.debugger-code-panel{border-color:#444}}.webstack-block{border:1px solid #3a3f4b;border-radius:8px;overflow:hidden;margin:1rem 0;background:#1e1e1e}.webstack-header{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;background:#2d2d2d;border-bottom:1px solid #3a3f4b}.webstack-title{display:flex;align-items:center;gap:8px;font-weight:500;color:#e0e0e0}.webstack-icon{font-size:1.1em}.webstack-id{font-size:.8em;color:#888;font-family:monospace}.webstack-sections{display:flex;gap:6px}.webstack-section-badge{font-size:.7em;padding:2px 6px;border-radius:4px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.webstack-section-php{background:#4f5b93;color:#fff}.webstack-section-html{background:#e44d26;color:#fff}.webstack-section-css{background:#264de4;color:#fff}.webstack-section-js,.webstack-section-javascript{background:#f7df1e;color:#000}.webstack-section-node{background:#68a063;color:#fff}.webstack-editor{border-bottom:1px solid #3a3f4b}.webstack-controls{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#252526;border-bottom:1px solid #3a3f4b}.webstack-run{display:flex;align-items:center;gap:6px;padding:6px 14px;background:#0e639c;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:.9em;font-weight:500;transition:background .2s}.webstack-run:hover:not(:disabled){background:#17b}.webstack-run:disabled{opacity:.7;cursor:not-allowed}.webstack-run--running{background:#6c757d}.webstack-reset{padding:6px 12px;background:transparent;color:#888;border:1px solid #3a3f4b;border-radius:4px;cursor:pointer;font-size:.9em;transition:all .2s}.webstack-reset:hover{background:#3a3f4b;color:#e0e0e0}.webstack-timing{margin-left:auto;font-size:.8em;color:#888;font-family:monospace}.webstack-output{background:#1e1e1e;position:relative}.webstack-resize-handle{height:6px;background:#3a3f4b;cursor:ns-resize;transition:background .2s;display:flex;align-items:center;justify-content:center}.webstack-resize-handle:after{content:"";width:40px;height:3px;background:#555;border-radius:2px}.webstack-resize-handle:hover,.webstack-resize-handle--active{background:#4a5568}.webstack-resize-handle:hover:after,.webstack-resize-handle--active:after{background:#888}.webstack-tabs{display:flex;gap:0;background:#252526;border-bottom:1px solid #3a3f4b}.webstack-tab{padding:8px 16px;background:transparent;color:#888;border:none;border-bottom:2px solid transparent;cursor:pointer;font-size:.85em;transition:all .2s;display:flex;align-items:center;gap:6px}.webstack-tab:hover{color:#e0e0e0;background:#2a2d35}.webstack-tab--active{color:#e0e0e0;border-bottom-color:#0e639c}.webstack-console-badge{background:#0e639c;color:#fff;font-size:.75em;padding:1px 6px;border-radius:10px}.webstack-tab-content{overflow:hidden}.webstack-preview{height:100%;background:#fff}.webstack-iframe{width:100%;height:100%;border:none;background:#fff}.webstack-html{padding:12px;overflow:auto;height:100%;box-sizing:border-box}.webstack-html pre{margin:0;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.85em;line-height:1.5;white-space:pre-wrap;word-break:break-all}.webstack-html code{color:#9cdcfe}.webstack-console{padding:12px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.85em;height:100%;overflow:auto;box-sizing:border-box}.webstack-console-line{padding:2px 0;color:#d4d4d4;border-bottom:1px solid #2a2d35}.webstack-console-line:last-child{border-bottom:none}.webstack-console-empty{color:#666;font-style:italic}.webstack-error{color:#f48771;background:#3a1d1d;padding:8px 12px;border-radius:4px;margin-bottom:8px;white-space:pre-wrap}@media (max-width: 600px){.webstack-header{flex-direction:column;align-items:flex-start;gap:8px}.webstack-sections,.webstack-controls{flex-wrap:wrap}.webstack-timing{margin-left:0;width:100%;text-align:right}}.toc{max-height:calc(100vh - var(--header-height) - 4rem);overflow-y:auto;padding:1rem;background:var(--color-bg-white);border:1px solid var(--color-border);border-radius:8px;font-size:.875rem}.toc-title{font-weight:600;color:var(--color-text);margin-bottom:.75rem;padding-bottom:.5rem;border-bottom:1px solid var(--color-border)}.toc-list{list-style:none;padding:0;margin:0}.toc-item{margin:0}.toc-link{display:block;width:100%;padding:.375rem .5rem;background:none;border:none;border-left:2px solid transparent;text-align:left;color:var(--color-text-secondary);font-family:inherit;font-size:.8125rem;line-height:1.4;cursor:pointer;transition:all var(--transition-fast);border-radius:0 4px 4px 0}.toc-link:hover{color:var(--color-text);background:var(--color-bg-secondary)}.toc-link.active{color:var(--color-primary-light);border-left-color:var(--color-primary-light);background:#3b82f614}.toc-level-1 .toc-link{padding-left:.5rem;font-weight:500}.toc-level-2 .toc-link{padding-left:1rem}.toc-level-3 .toc-link{padding-left:1.5rem;font-size:.75rem}.toc-level-4 .toc-link{padding-left:2rem;font-size:.75rem}.toc::-webkit-scrollbar{width:4px}.toc::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:2px}@media (max-width: 1200px){.toc{display:none}}.chapter-wrapper{display:flex;gap:2rem;max-width:1200px;margin:0 auto}.chapter{flex:1;min-width:0;max-width:900px}.chapter-toc{flex-shrink:0;width:220px;align-self:flex-start;position:sticky;top:calc(var(--header-height) + 2rem)}@media (max-width: 1200px){.chapter-wrapper{display:block}.chapter-toc{display:none}}.chapter-header{margin-bottom:2.5rem;padding-bottom:1.5rem;border-bottom:1px solid var(--color-border)}.chapter-header-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.chapter-position{font-size:.8125rem;font-weight:500;color:var(--color-primary-light)}.bookmark-btn{padding:.375rem .625rem;border:1px solid var(--color-border);border-radius:4px;background:var(--color-bg-white);color:var(--color-text-muted);font-size:1.25rem;cursor:pointer;transition:all var(--transition-fast);line-height:1}.bookmark-btn:hover{background:var(--color-bg-secondary);border-color:var(--color-text-muted)}.bookmark-btn.active{color:#f59e0b;border-color:#f59e0b}.chapter-title{font-size:2.25rem;font-weight:700;line-height:1.2;color:var(--color-text);margin-bottom:1rem}.chapter-tags{display:flex;flex-wrap:wrap;gap:.5rem}.chapter-content{font-size:1.0625rem;line-height:1.75}.chapter-content h1,.chapter-content h2,.chapter-content h3,.chapter-content h4{font-weight:600;line-height:1.3;color:var(--color-text);margin-top:2rem;margin-bottom:1rem}.chapter-content h1{font-size:1.875rem}.chapter-content h2{font-size:1.5rem}.chapter-content h3{font-size:1.25rem}.chapter-content h4{font-size:1.125rem}.chapter-content p{margin-bottom:1.25rem}.chapter-content ul,.chapter-content ol{margin-bottom:1.25rem;padding-left:1.5rem}.chapter-content li{margin-bottom:.5rem}.chapter-content li::marker{color:var(--color-primary-light)}.chapter-content .inline-code{padding:.125rem .375rem;font-size:.9em;background:var(--color-bg-secondary);border-radius:4px;color:var(--color-primary)}.table-wrapper{overflow-x:auto;margin:1.5rem 0}.chapter-content table{width:100%;border-collapse:collapse;font-size:.9375rem}.chapter-content th,.chapter-content td{padding:.75rem 1rem;border:1px solid var(--color-border);text-align:left}.chapter-content th{background:var(--color-bg-secondary);font-weight:600}.chapter-content tr:hover td{background:var(--color-bg)}.chapter-content .callout{margin:1.5rem 0;padding:1rem 1.25rem;background:linear-gradient(90deg,#3b82f614,#3b82f605);border-left:4px solid var(--color-primary-light);border-radius:0 8px 8px 0;color:var(--color-text)}.chapter-content .callout p{margin:0}.chapter-content a{color:var(--color-primary-light);text-decoration:underline;text-underline-offset:2px}.chapter-content a:hover{color:var(--color-primary)}.external-icon{font-size:.75em;margin-left:.25rem;opacity:.7}.chapter-content img{max-width:100%;height:auto;border-radius:8px;margin:1.5rem 0}.chapter-content hr{border:none;border-top:1px solid var(--color-border);margin:2rem 0}.chapter-nav{display:flex;align-items:center;justify-content:space-between;margin-top:3rem;padding-top:2rem;border-top:1px solid var(--color-border)}.nav-btn{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.25rem;background:var(--color-bg-white);border:1px solid var(--color-border);border-radius:8px;font-size:.9375rem;font-weight:500;color:var(--color-text);transition:all var(--transition-fast)}.nav-btn:hover:not(:disabled){background:var(--color-bg-secondary);border-color:var(--color-border-dark)}.nav-btn-next:not(:disabled){background:var(--color-primary);border-color:var(--color-primary);color:#fff}.nav-btn-next:hover:not(:disabled){background:var(--color-primary-dark)}.nav-btn-arrow{font-size:1.125rem}.nav-shortcuts{display:flex;align-items:center;gap:.5rem;font-size:.8125rem;color:var(--color-text-muted)}@media (max-width: 768px){.chapter-title{font-size:1.5rem}.chapter-content{font-size:1rem}.chapter-content h1{font-size:1.5rem}.chapter-content h2{font-size:1.25rem}.chapter-content h3{font-size:1.125rem}.chapter-content h4{font-size:1rem}.nav-shortcuts{display:none}.nav-btn{min-height:44px;min-width:44px;padding:.75rem 1rem;justify-content:center}.nav-btn-text{display:none}.nav-btn-arrow{font-size:1.5rem}.bookmark-btn{min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center}.chapter-header{margin-bottom:1.5rem;padding-bottom:1rem}.chapter-nav{margin-top:2rem;padding-top:1.5rem}.chapter-content th,.chapter-content td{padding:.5rem;font-size:.875rem}}@media (max-width: 480px){.chapter-title{font-size:1.375rem}.chapter-position{font-size:.75rem}}.app-footer{display:flex;justify-content:center;align-items:center;gap:.5rem;padding:1rem;font-size:.8125rem;color:var(--color-text-muted);border-top:1px solid var(--color-border);background:var(--color-bg-white)}.footer-link{background:none;border:none;padding:.25rem .5rem;font-size:inherit;color:var(--color-text-secondary);cursor:pointer;transition:color var(--transition-fast)}.footer-link:hover{color:var(--color-primary-light);text-decoration:underline}.footer-separator{color:var(--color-border-dark)}.screen{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--color-bg) 0%,var(--color-bg-secondary) 100%)}.screen-content{text-align:center;padding:2rem}.loading-screen .loader{width:48px;height:48px;margin:0 auto 1.5rem;border:4px solid var(--color-border);border-top-color:var(--color-primary-light);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-screen p{font-size:1.125rem;color:var(--color-text-secondary)}.error-screen .error-icon{font-size:4rem;margin-bottom:1rem}.error-screen h1{font-size:1.5rem;font-weight:600;margin-bottom:.75rem;color:var(--color-text)}.error-screen p{font-size:1rem;color:var(--color-text-secondary);margin-bottom:1.5rem;max-width:400px}.retry-btn{padding:.75rem 1.5rem;background:var(--color-primary);border:none;border-radius:8px;font-size:.9375rem;font-weight:500;color:#fff;transition:background var(--transition-fast)}.retry-btn:hover{background:var(--color-primary-dark)}.app{min-height:100vh;display:flex;flex-direction:column}.app-body{display:flex;flex:1;margin-top:var(--header-height)}.app-main{flex:1;min-width:0;padding:2rem 3rem;transition:margin-left var(--transition-normal)}.app.sidebar-open .app-main{margin-left:var(--sidebar-width)}.app.sidebar-closed .app-main{margin-left:0}@media (max-width: 1024px){.app.sidebar-open .app-main{margin-left:0}.app.sidebar-open .sidebar{position:fixed;z-index:50;box-shadow:var(--shadow-lg)}}@media (max-width: 768px){.app-main{padding:1rem}}@media (max-width: 480px){.app-main{padding:.75rem}}*{margin:0;padding:0;box-sizing:border-box}:root{--color-primary: #1e3a8a;--color-primary-light: #3b82f6;--color-primary-dark: #1e40af;--color-accent: #10b981;--color-accent-light: #34d399;--color-bg: #f8fafc;--color-bg-secondary: #f1f5f9;--color-bg-white: #ffffff;--color-text: #1e293b;--color-text-secondary: #64748b;--color-text-muted: #94a3b8;--color-border: #e2e8f0;--color-border-dark: #cbd5e1;--font-sans: "Inter", system-ui, -apple-system, sans-serif;--font-mono: "JetBrains Mono", "SF Mono", Consolas, monospace;--header-height: 80px;--sidebar-width: 320px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1);--transition-fast: .15s ease;--transition-normal: .25s ease}[data-theme=dark]{--color-primary: #3b82f6;--color-primary-light: #60a5fa;--color-primary-dark: #2563eb;--color-accent: #34d399;--color-accent-light: #6ee7b7;--color-bg: #0f172a;--color-bg-secondary: #1e293b;--color-bg-white: #1e293b;--color-text: #f1f5f9;--color-text-secondary: #94a3b8;--color-text-muted: #64748b;--color-border: #334155;--color-border-dark: #475569;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .4);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4)}[data-theme=ocean]{--color-primary: #0891b2;--color-primary-light: #22d3ee;--color-primary-dark: #0e7490;--color-accent: #f59e0b;--color-accent-light: #fbbf24;--color-bg: #ecfeff;--color-bg-secondary: #cffafe;--color-bg-white: #ffffff;--color-text: #164e63;--color-text-secondary: #0e7490;--color-text-muted: #67e8f9;--color-border: #a5f3fc;--color-border-dark: #67e8f9}[data-theme=ocean-dark]{--color-primary: #22d3ee;--color-primary-light: #67e8f9;--color-primary-dark: #06b6d4;--color-accent: #fbbf24;--color-accent-light: #fcd34d;--color-bg: #083344;--color-bg-secondary: #164e63;--color-bg-white: #155e75;--color-text: #ecfeff;--color-text-secondary: #a5f3fc;--color-text-muted: #67e8f9;--color-border: #0e7490;--color-border-dark: #0891b2;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .4);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4)}[data-theme=forest]{--color-primary: #059669;--color-primary-light: #10b981;--color-primary-dark: #047857;--color-accent: #d97706;--color-accent-light: #f59e0b;--color-bg: #ecfdf5;--color-bg-secondary: #d1fae5;--color-bg-white: #ffffff;--color-text: #064e3b;--color-text-secondary: #047857;--color-text-muted: #6ee7b7;--color-border: #a7f3d0;--color-border-dark: #6ee7b7}[data-theme=forest-dark]{--color-primary: #10b981;--color-primary-light: #34d399;--color-primary-dark: #059669;--color-accent: #f59e0b;--color-accent-light: #fbbf24;--color-bg: #022c22;--color-bg-secondary: #064e3b;--color-bg-white: #065f46;--color-text: #ecfdf5;--color-text-secondary: #a7f3d0;--color-text-muted: #6ee7b7;--color-border: #047857;--color-border-dark: #059669;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .4);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4)}[data-theme=sunset]{--color-primary: #ea580c;--color-primary-light: #f97316;--color-primary-dark: #c2410c;--color-accent: #0891b2;--color-accent-light: #22d3ee;--color-bg: #fff7ed;--color-bg-secondary: #ffedd5;--color-bg-white: #ffffff;--color-text: #7c2d12;--color-text-secondary: #c2410c;--color-text-muted: #fdba74;--color-border: #fed7aa;--color-border-dark: #fdba74}[data-theme=sunset-dark]{--color-primary: #f97316;--color-primary-light: #fb923c;--color-primary-dark: #ea580c;--color-accent: #22d3ee;--color-accent-light: #67e8f9;--color-bg: #431407;--color-bg-secondary: #7c2d12;--color-bg-white: #9a3412;--color-text: #fff7ed;--color-text-secondary: #fed7aa;--color-text-muted: #fdba74;--color-border: #c2410c;--color-border-dark: #ea580c;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .4);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4)}[data-theme=lavender]{--color-primary: #7c3aed;--color-primary-light: #8b5cf6;--color-primary-dark: #6d28d9;--color-accent: #059669;--color-accent-light: #10b981;--color-bg: #f5f3ff;--color-bg-secondary: #ede9fe;--color-bg-white: #ffffff;--color-text: #4c1d95;--color-text-secondary: #6d28d9;--color-text-muted: #c4b5fd;--color-border: #ddd6fe;--color-border-dark: #c4b5fd}[data-theme=lavender-dark]{--color-primary: #8b5cf6;--color-primary-light: #a78bfa;--color-primary-dark: #7c3aed;--color-accent: #10b981;--color-accent-light: #34d399;--color-bg: #2e1065;--color-bg-secondary: #4c1d95;--color-bg-white: #5b21b6;--color-text: #f5f3ff;--color-text-secondary: #ddd6fe;--color-text-muted: #c4b5fd;--color-border: #6d28d9;--color-border-dark: #7c3aed;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .4);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4)}html{font-size:16px;scroll-behavior:smooth}body{font-family:var(--font-sans);color:var(--color-text);background:var(--color-bg);line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-bg-secondary)}::-webkit-scrollbar-thumb{background:var(--color-border-dark);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--color-text-muted)}::selection{background:var(--color-primary-light);color:#fff}a{color:var(--color-primary-light);text-decoration:none;transition:color var(--transition-fast)}a:hover{color:var(--color-primary);text-decoration:underline}button{font-family:inherit;cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}code{font-family:var(--font-mono)}kbd{display:inline-block;padding:2px 6px;font-family:var(--font-mono);font-size:.75rem;background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:4px;box-shadow:0 1px 1px #0000001a}.tag{display:inline-block;padding:2px 10px;font-size:.75rem;font-weight:500;background:var(--color-bg-secondary);border-radius:9999px;color:var(--color-text-secondary)}@media (max-width: 768px){:root{--header-height: 60px;--sidebar-width: 280px}}@media (max-width: 480px){:root{--sidebar-width: 100%}}
