/**
 * 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;inset: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,.xterm .xterm-message{position:absolute;inset:0;z-index:10;color:transparent;pointer-events:none}.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}:root{--bg: #f5f6f8;--surface: #ffffff;--surface-2: #fbfbfc;--ink: #14161a;--ink-2: #3a414b;--muted: #6b7480;--line: #e6e8ec;--line-strong: #d2d7de;--build: #1d4fc7;--attack: #c02a30;--harden: #0d7050;--build-tint: #eaf0fe;--attack-tint: #fdecec;--harden-tint: #e6f4ee;--ok: #0d7050;--warn: #b45309;--radius: 7px;--radius-sm: 5px;--shadow: 0 1px 2px rgba(20, 22, 26, .04), 0 4px 16px rgba(20, 22, 26, .05);--mono: ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Code", Menlo, Consolas, monospace;--sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:inherit;text-decoration:none}h1,h2,h3,h4{margin:0;font-weight:650;letter-spacing:-.01em;line-height:1.15}h1{font-size:2.1rem}h2{font-size:1.4rem}h3{font-size:1.1rem}p{margin:.5em 0}.mono{font-family:var(--mono)}.eyebrow{font-family:var(--mono);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.shell{min-height:100vh;display:flex;flex-direction:column}.container{width:100%;max-width:1080px;margin:0 auto;padding:0 24px}main{flex:1;padding:40px 0 72px}.nav{position:sticky;top:0;z-index:40;background:#ffffffd1;backdrop-filter:saturate(180%) blur(10px);border-bottom:1px solid var(--line)}.nav-inner{display:flex;align-items:center;gap:20px;height:60px}.brand{display:flex;align-items:center;gap:10px;font-family:var(--mono);font-weight:600;font-size:.98rem;letter-spacing:-.02em}.brand .glyph{display:inline-flex}.nav-links{display:flex;gap:4px;margin-left:auto;align-items:center}.nav-links a{font-size:.9rem;color:var(--ink-2);padding:7px 11px;border-radius:var(--radius-sm)}.nav-links a:hover{background:var(--surface-2);color:var(--ink)}.nav-links a.active{color:var(--ink);background:var(--surface-2)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--sans);font-size:.9rem;font-weight:550;padding:9px 16px;border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);cursor:pointer;transition:transform .04s ease,background .15s,border-color .15s;white-space:nowrap}.btn:hover{background:var(--surface-2)}.btn:active{transform:translateY(.5px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--ink);border-color:var(--ink);color:#fff}.btn-primary:hover{background:#000}.btn-attack{background:var(--attack);border-color:var(--attack);color:#fff}.btn-attack:hover{background:#d13b40}.btn-ghost{border-color:transparent;background:transparent}.btn-ghost:hover{background:var(--surface-2)}.btn-sm{padding:6px 11px;font-size:.82rem}.btn-block{width:100%}.btn-row{display:flex;gap:10px;flex-wrap:wrap}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card-pad{padding:22px}.grid{display:grid;gap:16px}.grid-2{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(3,1fr)}.field{margin-bottom:14px}.field label{display:block;font-size:.8rem;color:var(--ink-2);margin-bottom:6px;font-weight:550}.input{width:100%;font-family:var(--sans);font-size:.95rem;padding:10px 12px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink)}.input:focus{outline:2px solid var(--build);outline-offset:-1px;border-color:var(--build)}select.input{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 18px) 55%,calc(100% - 13px) 55%;background-size:5px 5px;background-repeat:no-repeat;padding-right:34px}.badge{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:.7rem;letter-spacing:.04em;padding:3px 8px;border-radius:100px;border:1px solid var(--line-strong);color:var(--ink-2);background:var(--surface-2);text-transform:uppercase}.badge.free{color:var(--ink-2)}.badge.pro{color:var(--build);border-color:var(--build);background:var(--build-tint)}.badge.bootcamp{color:var(--harden);border-color:var(--harden);background:var(--harden-tint)}.badge.locked{color:var(--muted)}.dot{width:7px;height:7px;border-radius:50%;display:inline-block}.track{display:flex;align-items:center;gap:0}.track-node{display:flex;flex-direction:column;align-items:center;gap:7px;position:relative;flex:0 0 auto}.track-dot{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:2px solid var(--line-strong);background:var(--surface);font-family:var(--mono);font-size:.78rem;color:var(--muted)}.track-label{font-family:var(--mono);font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.track-link{height:2px;flex:1 1 auto;background:var(--line-strong);min-width:26px;margin-top:-22px}.track-node.build.done .track-dot{border-color:var(--build);background:var(--build);color:#fff}.track-node.attack.done .track-dot{border-color:var(--attack);background:var(--attack);color:#fff}.track-node.harden.done .track-dot{border-color:var(--harden);background:var(--harden);color:#fff}.track-node.available.build .track-dot{border-color:var(--build);color:var(--build)}.track-node.available.attack .track-dot{border-color:var(--attack);color:var(--attack)}.track-node.available.harden .track-dot{border-color:var(--harden);color:var(--harden)}.track-node.build .track-label.on{color:var(--build)}.track.sm .track-dot{width:22px;height:22px;font-size:.66rem}.track.sm .track-link{min-width:16px;margin-top:-18px}.lab-card{display:flex;flex-direction:column;gap:14px;padding:18px;transition:border-color .15s,box-shadow .15s}.lab-card:hover{border-color:var(--line-strong);box-shadow:0 2px 4px #14161a0d,0 10px 26px #14161a12}.lab-card .lab-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.lab-card h3{font-size:1.02rem}.lab-card .lab-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.lab-idx{font-family:var(--mono);font-size:.75rem;color:var(--muted)}.lab-desc{color:var(--ink-2);font-size:.9rem}.meter{height:10px;border-radius:100px;background:var(--line);overflow:hidden;display:flex}.meter>span{display:block;height:100%}.meter .m-build{background:var(--build)}.meter .m-attack{background:var(--attack)}.meter .m-harden{background:var(--harden)}.stat{display:flex;flex-direction:column;gap:3px}.stat .num{font-family:var(--mono);font-size:1.7rem;font-weight:600;letter-spacing:-.02em}.stat .lbl{font-size:.78rem;color:var(--muted)}table{width:100%;border-collapse:collapse;font-size:.9rem}th,td{text-align:left;padding:11px 14px;border-bottom:1px solid var(--line)}th{font-family:var(--mono);font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:500}tbody tr:hover{background:var(--surface-2)}.prose{color:var(--ink-2)}.prose pre,.prose code{font-family:var(--mono);font-size:.86rem}.prose pre{background:#14161a;color:#e8eaed;padding:14px 16px;border-radius:var(--radius-sm);overflow-x:auto}.hero{padding:30px 0 20px}.hero h1{font-size:2.9rem;letter-spacing:-.03em;max-width:16ch}.hero .lead{font-size:1.12rem;color:var(--ink-2);max-width:52ch;margin-top:14px}.terminal{font-family:var(--mono);font-size:.85rem;background:#101216;color:#d7dbe0;border-radius:var(--radius);padding:16px 18px;border:1px solid #23262d;line-height:1.7;box-shadow:var(--shadow)}.terminal .c-prompt{color:#6ea8fe}.terminal .c-attack{color:#ff6b70}.terminal .c-ok{color:#4ec98f}.terminal .c-dim{color:#7a828d}.section-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:18px}.stack{display:flex;flex-direction:column}.stack-8>*+*{margin-top:8px}.stack-16>*+*{margin-top:16px}.stack-24>*+*{margin-top:24px}.row{display:flex;gap:12px;align-items:center}.between{justify-content:space-between}.wrap{flex-wrap:wrap}.muted{color:var(--muted)}.center{text-align:center}.divider{height:1px;background:var(--line);border:0;margin:24px 0}.alert{padding:11px 14px;border-radius:var(--radius-sm);font-size:.88rem;border:1px solid}.alert-error{background:var(--attack-tint);border-color:#f3c3c4;color:#a3282c}.alert-info{background:var(--build-tint);border-color:#cfddfb;color:#1f47b0}.alert-ok{background:var(--harden-tint);border-color:#bfe3d3;color:#0c6247}.alert-warn{background:#fdf4e3;border-color:#f0dcae;color:#8a5a00}.auth-wrap{max-width:400px;margin:24px auto}.link{color:var(--build)}.link:hover{text-decoration:underline}.pricing-card{display:flex;flex-direction:column;gap:16px;padding:24px}.pricing-card.featured{border-color:var(--ink);box-shadow:0 2px 4px #14161a0d,0 12px 30px #14161a17}.price{font-family:var(--mono);font-size:2.2rem;font-weight:600;letter-spacing:-.02em}.price small{font-size:.85rem;color:var(--muted);font-weight:400}.feat-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:9px;font-size:.9rem;color:var(--ink-2)}.feat-list li{display:flex;gap:9px;align-items:flex-start}.feat-list .tick{color:var(--harden);flex:0 0 auto;margin-top:1px}.topology{width:100%;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface-2);padding:12px;overflow:auto}.topology svg{max-width:100%;height:auto;display:block;margin:0 auto}.topo-tip{position:absolute;z-index:30;transform:translate(12px,14px);pointer-events:none;background:var(--ink);color:var(--surface-2);font-family:var(--mono, ui-monospace, monospace);font-size:.78rem;line-height:1.3;padding:4px 8px;border-radius:6px;box-shadow:0 2px 10px #00000059;white-space:nowrap;max-width:420px}.topology [data-port],.topology [data-link]{cursor:help}.spinner{width:18px;height:18px;border:2px solid var(--line-strong);border-top-color:var(--ink);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.page-center{min-height:60vh;display:flex;align-items:center;justify-content:center}.footer{border-top:1px solid var(--line);padding:26px 0;color:var(--muted);font-size:.83rem}.console-window-page{height:100vh;width:100vw;display:flex;flex-direction:column;background:var(--surface)}.console-window-center{align-items:center;justify-content:center;text-align:center;padding:24px}.console-window-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px;border-bottom:1px solid var(--line);flex:0 0 auto}.console-modal-tabs{display:flex;gap:4px;flex-wrap:wrap}.console-window-body{flex:1 1 auto;min-height:0;padding:12px}.console-window-body .console-panel{height:100%;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}@media (max-width: 820px){.grid-3,.grid-2{grid-template-columns:1fr}.hero h1{font-size:2.2rem}.nav-links a.hide-sm{display:none}}@media (prefers-reduced-motion: reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}:focus-visible{outline:2px solid var(--build);outline-offset:2px}.lab-content{color:var(--ink-2);font-size:.95rem;line-height:1.65}.lab-content>*:first-child{margin-top:0}.lab-content>*:last-child{margin-bottom:0}.lab-content h2{font-size:1.3rem;margin:28px 0 12px;color:var(--ink);letter-spacing:-.01em}.lab-content h3{font-size:1.05rem;margin:22px 0 10px;color:var(--ink)}.lab-content h4{font-family:var(--mono);font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:20px 0 8px}.lab-content p{margin:10px 0}.lab-content ul,.lab-content ol{margin:10px 0;padding-left:22px}.lab-content li{margin:5px 0}.lab-content a{color:var(--build);text-decoration:underline;text-underline-offset:2px}.lab-content strong{color:var(--ink);font-weight:650}.lab-content hr{border:0;border-top:1px solid var(--line);margin:24px 0}.lab-content :not(pre)>code{font-family:var(--mono);font-size:.85em;background:#eef0f3;color:#b23138;padding:1px 6px;border-radius:4px;border:1px solid var(--line)}.lab-content pre{background:#0f1116;color:#dfe3e8;border:1px solid #23262d;border-radius:var(--radius);padding:16px 18px;overflow-x:auto;font-family:var(--mono);font-size:.84rem;line-height:1.6;margin:14px 0;position:relative}.lab-content pre code{background:none;color:inherit;padding:0;border:0;font-size:inherit}.lab-content table{margin:16px 0;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.lab-content th{background:var(--surface-2)}.lab-content td{font-size:.9rem}.lab-content blockquote{margin:14px 0;padding:10px 16px;border-left:3px solid var(--line-strong);background:var(--surface-2);border-radius:0 6px 6px 0;color:var(--ink-2)}.lab-content blockquote p{margin:4px 0}.lab-content .mission{background:linear-gradient(135deg,#14161a,#1d2027);color:#e8eaed;border-radius:var(--radius);padding:20px 22px;margin:16px 0;border:1px solid #2a2e37}.lab-content .mission .tag{font-family:var(--mono);font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;color:#ff6b70;display:block;margin-bottom:8px}.lab-content .mission h3{color:#fff;margin:0 0 8px}.lab-content .mission p{color:#c3c8d0;margin:6px 0}.lab-content .mission code{background:#000;color:#6ee7a8;border-color:#2a2e37}.lab-content .stats{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0}.lab-content .chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:.72rem;letter-spacing:.03em;padding:5px 11px;border-radius:100px;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-2)}.lab-content .chip.xp{border-color:#b8860b;color:#8a6608;background:#fbf4e0}.lab-content .chip.diff{border-color:var(--attack);color:var(--attack);background:var(--attack-tint)}.lab-content .chip.time{border-color:var(--build);color:var(--build);background:var(--build-tint)}.lab-content .chip.loot{border-color:var(--harden);color:var(--harden);background:var(--harden-tint)}.lab-content .objectives{list-style:none;padding:0;margin:14px 0}.lab-content .objectives li{padding:8px 12px 8px 38px;position:relative;margin:6px 0;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface)}.lab-content .objectives li:before{content:"▢";position:absolute;left:13px;top:8px;color:var(--muted);font-size:.95rem}.lab-content .callout{margin:14px 0;padding:12px 16px 12px 44px;border-radius:var(--radius-sm);position:relative;border:1px solid;font-size:.9rem}.lab-content .callout:before{position:absolute;left:14px;top:11px;font-size:1rem}.lab-content .callout p{margin:4px 0}.lab-content .callout.tip{background:var(--harden-tint);border-color:#bfe3d3;color:#0c6247}.lab-content .callout.tip:before{content:"💡"}.lab-content .callout.warn{background:#fdf4e3;border-color:#f0dcae;color:#8a5a00}.lab-content .callout.warn:before{content:"⚠️"}.lab-content .callout.danger{background:var(--attack-tint);border-color:#f3c3c4;color:#a3282c}.lab-content .callout.danger:before{content:"🚫"}.lab-content .callout.info{background:var(--build-tint);border-color:#cfddfb;color:#1f47b0}.lab-content .callout.info:before{content:"ℹ️"}.lab-content .callout.aha{background:#f4effe;border-color:#ddc7f7;color:#6425c9}.lab-content .callout.aha:before{content:"✨"}.lab-content .callout strong{color:inherit}.lab-content .achievement{display:flex;align-items:center;gap:12px;margin:16px 0;padding:12px 16px;border-radius:var(--radius);background:linear-gradient(135deg,#fdf6e3,#f9edcf);border:1px solid #e6cf8f}.lab-content .achievement .medal{font-size:1.6rem;line-height:1}.lab-content .achievement .txt{display:flex;flex-direction:column}.lab-content .achievement .lbl{font-family:var(--mono);font-size:.64rem;letter-spacing:.16em;text-transform:uppercase;color:#a87f14}.lab-content .achievement .name{font-weight:650;color:#6b4e05}.lab-content .boss{margin:20px 0;padding:18px 20px;border-radius:var(--radius);background:linear-gradient(135deg,#2a1113,#7a1c22);color:#ffe9ea;border:1px solid #97343a;position:relative;overflow:hidden}.lab-content .boss .tag{font-family:var(--mono);font-size:.68rem;letter-spacing:.18em;text-transform:uppercase;color:#ff9ea2;display:block;margin-bottom:6px}.lab-content .boss h3{color:#fff;margin:0 0 6px;font-size:1.2rem}.lab-content .boss p{color:#ffd0d2;margin:4px 0}.lab-content .boss code{background:#000;color:#ff9ea2;border-color:#97343a}.topo-legend{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.topo-legend-item{font-family:var(--mono);font-size:.72rem;color:var(--ink-2);padding:4px 10px;border:1px solid var(--line);border-radius:100px;background:var(--surface-2)}.book-ref{font-family:var(--mono);font-size:.72rem;color:var(--muted);display:inline-flex;align-items:center;gap:4px}.lab-content .phase{margin:8px 0 20px}.lab-content .phase-head{display:flex;align-items:baseline;gap:10px;margin:18px 0 10px;padding-bottom:6px;border-bottom:1px solid var(--line)}.lab-content .phase-head h3{margin:0;font-size:1.02rem;color:var(--fg)}.lab-content .phase-tag{font-family:var(--mono);font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:2px 8px;border-radius:var(--radius-sm);background:var(--surface-2);color:var(--muted);border:1px solid var(--line)}.lab-content .phase.attack .phase-tag{background:var(--attack-tint);color:#a3282c;border-color:#f3c3c4}.lab-content .phase.harden .phase-tag{background:var(--harden-tint);color:#0c6247;border-color:#bfe3d3}.lab-content .phase.build .phase-tag{background:var(--build-tint);color:#1f47b0;border-color:#cfddfb}.lab-content .goal{margin:4px 0 14px;color:var(--muted);font-size:.92rem;line-height:1.55}.lab-content .step{margin:16px 0;padding:12px 14px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface)}.lab-content .step-label{display:flex;align-items:baseline;gap:8px;font-weight:600;font-size:.94rem;margin-bottom:10px;color:var(--fg)}.lab-content .step-label .n{font-family:var(--mono);font-size:.78rem;font-weight:700;background:var(--surface-2);color:var(--muted);border:1px solid var(--line);border-radius:999px;min-width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center}.lab-content .step>p{margin:8px 0;font-size:.92rem;line-height:1.55;color:var(--fg-soft, var(--fg))}.lab-content .step pre{position:relative;margin:10px 0;padding:30px 14px 12px;background:#0d1117;color:#d4dae3;border-radius:var(--radius-sm);overflow-x:auto;font-family:var(--mono);font-size:.8rem;line-height:1.6;white-space:pre-wrap;word-break:break-word}.lab-content .step pre .copy-btn{position:absolute;top:6px;right:8px;font-family:var(--mono);font-size:.68rem;cursor:pointer;background:transparent;color:#7a828d;border:1px solid #2c323b;border-radius:4px;padding:2px 8px}.lab-content .step pre .copy-btn:hover{color:#d4dae3;border-color:#4b5563}.lab-content .step pre .prompt{color:#6ea8fe;font-weight:600}.lab-content .step pre .cmt{color:#7a828d;font-style:italic}.lab-content .step pre .attackline{color:#ff6b70}.lab-content .note{margin:10px 0 2px;padding:10px 12px;border-radius:var(--radius-sm);font-size:.88rem;line-height:1.55}.lab-content .note.why{background:var(--build-tint);border:1px solid #cfddfb;color:#1f47b0}.lab-content .note.watch{background:var(--attack-tint);border:1px solid #f3c3c4;color:#a3282c}.lab-content .note strong{color:inherit}
