/**
 * 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}:root{font-family:Inter,Pretendard,Noto Sans KR,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#17191c;background:#0d1115;font-synthesis:none}*{box-sizing:border-box}body{margin:0;min-width:320px}button{font:inherit}button:focus-visible{outline:2px solid #8c54ff;outline-offset:2px}.app-shell{height:100vh;height:100dvh;display:grid;grid-template-columns:252px minmax(540px,.95fr) minmax(0,1.1fr);grid-template-rows:60px 1fr;overflow:hidden}.topbar{grid-column:1 / -1;background:#0b0e11;color:#f7f7f8;border-bottom:1px solid #31353b;position:relative;z-index:20;display:flex;align-items:center;min-width:0}.brand{width:252px;flex:none;display:flex;align-items:center;gap:12px;padding:0 20px;font-size:19px;border-right:1px solid #2d3136}.brand-mark{display:grid;place-items:center;width:28px;height:32px;color:#b98cff;border:1px solid #8c54ff;clip-path:polygon(50% 0,94% 25%,94% 75%,50% 100%,6% 75%,6% 25%);font:700 14px monospace}.current{display:flex;align-items:baseline;gap:16px;padding:0 28px;min-width:0}.current span{color:#969ca4;font-size:12px;white-space:nowrap}.current strong{white-space:nowrap}.top-actions{margin-left:auto;display:flex;align-items:center;gap:24px;padding-right:18px;font-size:13px;white-space:nowrap}.top-actions svg{width:16px}.timer,.environment{display:flex;gap:8px;align-items:center;color:#b8bdc4}.environment i{width:8px;height:8px;background:#777;border-radius:50%}.environment.online{color:#69dc7c}.environment.online i{background:#4ed269;box-shadow:0 0 0 4px #4ed26918}.secondary{border:1px solid #656b73;border-radius:6px;color:#f3f3f4;background:transparent;padding:8px 12px;display:flex;gap:7px;align-items:center;cursor:pointer}.secondary:hover{border-color:#9872d5;background:#2a2138}.app-user{display:flex;align-items:center;gap:7px;padding-left:2px;color:#d8dce0}.app-user>svg{width:17px;color:#a879ff}.app-user>span{display:flex;flex-direction:column;line-height:1.15}.app-user strong{max-width:110px;overflow:hidden;text-overflow:ellipsis;font-size:10px}.app-user small{margin-top:2px;color:#818891;font-size:8px}.icon-action{width:32px;height:32px;display:grid;place-items:center;border:0;border-radius:5px;background:transparent;color:#9da3aa;cursor:pointer}.icon-action:hover{color:#fff;background:#292f35}.icon-action svg{width:16px}.mobile-actions{position:relative;display:none}.mobile-actions-toggle{width:36px;height:36px;display:grid;place-items:center;border:1px solid #555c64;border-radius:6px;background:#171c21;color:#e5e7ea;cursor:pointer}.mobile-actions-toggle:hover,.mobile-actions-toggle[aria-expanded=true]{border-color:#8f65d0;background:#2a2138}.mobile-actions-panel{position:absolute;top:calc(100% + 8px);right:0;width:min(270px,calc(100vw - 24px));padding:7px;border:1px solid #3e454d;border-radius:9px;background:#151a20;box-shadow:0 18px 42px #000a}.mobile-actions-panel>button{width:100%;min-height:42px;display:flex;align-items:center;gap:10px;padding:9px 11px;border:0;border-radius:5px;background:transparent;color:#dfe2e5;text-align:left;cursor:pointer}.mobile-actions-panel>button:hover,.mobile-actions-panel>button:focus-visible{background:#30234f;color:#fff}.mobile-actions-user{display:flex;align-items:center;gap:10px;margin-bottom:5px;padding:10px 11px 12px;border-bottom:1px solid #343a41;color:#e7e9eb}.mobile-actions-user>svg{color:#ac7af9}.mobile-actions-user span{min-width:0;display:flex;flex-direction:column}.mobile-actions-user strong{overflow:hidden;font-size:11px;text-overflow:ellipsis;white-space:nowrap}.mobile-actions-user small{margin-top:3px;color:#858d96;font-size:9px}.sidebar{background:#10151a;color:#d6d9dd;padding:16px 9px;overflow-y:auto;display:flex;flex-direction:column}.course-progress{margin:0 7px 18px;padding:11px 10px 12px;border-bottom:1px solid #30363d}.course-progress>div:first-child{display:flex;align-items:baseline;justify-content:space-between}.course-progress>div:first-child span{color:#9299a2;font-size:10px;text-transform:uppercase;letter-spacing:.07em}.course-progress strong{color:#fff;font-size:18px}.course-progress strong small{color:#777f88;font-size:10px;font-weight:500}.progress-track{height:4px;margin-top:9px;background:#2b3036;border-radius:4px;overflow:hidden}.progress-track span{display:block;height:100%;background:#8d52ff;transition:width .3s ease}.course-progress p{margin:8px 0 0;display:flex;align-items:center;gap:5px;color:#858c95;font-size:9px}.course-progress p i{width:6px;height:6px;border-radius:50%}.complete-key{background:#8752ed}.skip-key{background:#d49a3a;margin-left:7px}.course-progress>small{display:block;margin-top:7px;color:#6f7780;font-size:9px;line-height:1.4}.nav-label{margin:0 12px 12px;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#858c95}.lab-item{width:100%;display:grid;grid-template-columns:28px 1fr 18px;align-items:center;gap:10px;padding:11px 12px;color:#c7cbd0;border:0;border-left:3px solid transparent;background:none;text-align:left;cursor:pointer;border-radius:5px;margin-bottom:3px}.lab-item b{display:grid;place-items:center;width:26px;height:26px;border:1px solid #4c535c;border-radius:5px;font-size:12px}.lab-item span{min-width:0}.lab-item em{display:block;font-style:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lab-item small{display:block;margin-top:3px;color:#858c95;font-size:9px}.lab-item.selected small{color:#c3adee}.lab-item svg{width:17px;color:#9d67ff}.lab-item svg.lab-skipped{color:#d49a3a}.lab-item.selected{background:#33245b;border-left-color:#9a61ff;color:#fff}.lab-item.locked{color:#656c74;cursor:not-allowed}.lab-item.locked b{border-color:#353a40}.lab-item.locked svg{color:#565d65;width:14px}.lab-item:disabled{opacity:1}.step-section{border-top:1px solid #30363d;margin-top:17px;padding-top:19px}.step-list{position:relative}.step-list:before{content:"";position:absolute;top:15px;bottom:15px;left:26px;width:1px;background:#4c535b}.step-item{position:relative;z-index:1;width:100%;border:0;background:transparent;color:#bec3c9;display:flex;align-items:center;gap:12px;padding:9px 8px;text-align:left;font-size:12px;cursor:pointer;border-radius:5px}.step-item.active{color:#fff;background:#2c214b}.step-item.locked{color:#626972;cursor:not-allowed}.step-item.locked .step-dot{border-color:#3e444b;color:#666d75}.step-item.locked .step-dot svg{width:9px}.step-item.skipped:not(.active){color:#bfaa82}.step-item:disabled{opacity:1}.step-dot{flex:none;width:18px;height:18px;border:1px solid #8b929b;background:#10151a;border-radius:50%;display:grid;place-items:center;font-size:9px}.step-dot svg{width:11px}.step-dot.done{background:#8549fa;border-color:#9b69ff;color:#fff}.step-dot.skipped{border-color:#d09a43;color:#e6b86b;background:#2a2116}.guide{background:#fff;min-width:0;display:flex;flex-direction:column;overflow:hidden;border-right:1px solid #7a5cae}.guide-inner{overflow-y:auto;flex:1;padding:32px clamp(32px,4vw,64px) 48px}.lab-overview{margin:0 0 30px;border:1px solid #dadde2;border-left:3px solid #7c3aed;border-radius:7px;overflow:hidden;background:#fbfbfc}.lab-overview-toggle{width:100%;border:0;background:transparent;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;padding:13px 15px;text-align:left;cursor:pointer;color:#24272b}.lab-overview-toggle .lab-number{color:#7c3aed;font:700 10px/1.1 monospace;letter-spacing:.07em}.lab-overview-toggle strong{display:block;font-size:13px}.lab-overview-toggle small{display:block;color:#7b8087;font-size:10px;margin-top:3px}.lab-overview-toggle>svg{width:17px;color:#777d84;transition:transform .2s}.lab-overview.open .lab-overview-toggle>svg{transform:rotate(180deg)}.lab-overview-body{padding:0 15px 15px 58px}.lab-overview-body>p{margin:0 0 10px;color:#575c62;font-size:11px;line-height:1.65}.lab-overview-body>p.course-identity{color:#2c3035;font-size:11px;margin-bottom:5px}.lab-overview-body>p.course-note{color:#7b6250;background:#fff8ed;border-left:2px solid #d89a43;padding:7px 9px;margin-bottom:11px}.lab-overview-body>div{display:flex;flex-wrap:wrap;gap:8px 18px}.lab-overview-body span{display:flex;align-items:center;gap:5px;color:#34383d;font-size:10px}.lab-overview-body svg{width:12px;color:#5fbd70}.step-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:9px}.step-count{color:#8147f5;margin:0 0 10px;font-size:13px;font-weight:700}.step-heading .step-count{margin:0}.step-heading>span{font-size:9px;font-weight:700;padding:4px 7px;border-radius:4px}.status-current{color:#6d42c1;background:#f0eaff}.status-done{color:#227b3a;background:#e7f7eb}.status-skipped{color:#8b651f;background:#fff3dd}h1{margin:0 0 25px;font-size:30px;letter-spacing:-.035em}.description{color:#4e5257;line-height:1.75}.objective,.concept{display:flex;gap:12px;padding:14px 0;border-top:1px solid #e3e5e8}.objective{margin-top:24px}.objective>svg,.concept>svg{flex:none;width:18px;color:#7c3aed;margin-top:1px}.objective strong,.concept strong{font-size:12px}.objective p,.concept p{margin:5px 0 0;color:#5e6369;font-size:13px;line-height:1.62}.command-block{margin-top:24px;border:1px solid #ccd0d5;border-radius:8px;padding:15px}.command-block>span{display:block;font-size:12px;font-weight:700;margin-bottom:10px}.command-block>div{display:flex;align-items:center;background:#f5f6f7;border:1px solid #d9dce0;border-radius:6px}.command-block code{flex:1;min-width:0;padding:13px;white-space:pre-wrap;overflow-wrap:anywhere;color:#292d31;font-size:12px}.command-block button{align-self:stretch;min-width:74px;background:transparent;border:0;border-left:1px solid #d9dce0;padding:0 11px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;color:#60656b;font-size:10px;font-weight:700}.command-block button:hover{background:#eceef0;color:#3f236f}.command-block button.copied{color:#267a3d;background:#eaf7ed}.command-block svg{width:14px}.command-actions{align-self:stretch;display:flex;flex:none}.command-actions button:last-child{min-width:112px;color:#7040c4}.hint-toggle{margin-top:28px;width:100%;display:flex;gap:9px;align-items:center;color:#773cf0;font-weight:700;background:#f7f3ff;border:1px solid #d7c4ff;padding:14px;border-radius:7px;cursor:pointer}.hint-toggle svg{width:17px}.hint-toggle svg:last-child{margin-left:auto;transition:transform .2s}.hint-toggle.open svg:last-child{transform:rotate(180deg)}.hint{background:#faf8ff;border:1px solid #e4d8ff;border-top:0;padding:14px;color:#55505d;font-size:13px;line-height:1.6}.expected{margin-top:18px;display:flex;flex-direction:column;gap:7px}.expected span{color:#6b7076;font-size:11px;font-weight:700}.expected code{padding:11px 13px;border-left:3px solid #8c54ff;background:#f6f7f8;color:#34383d;font-size:11px;white-space:pre-wrap}.trouble-toggle{width:100%;margin-top:16px;padding:10px 0;border:0;background:transparent;color:#666b72;display:flex;align-items:center;gap:8px;font-size:12px;cursor:pointer}.trouble-toggle svg{width:15px}.trouble-toggle svg:last-child{margin-left:auto;transition:transform .2s}.trouble-toggle.open svg:last-child{transform:rotate(180deg)}.trouble-list{margin:0;padding:12px 14px 12px 32px;background:#fff8f5;border:1px solid #f1d8cf;color:#685a55;font-size:11px;line-height:1.7}.success{margin-top:34px}.success h2{font-size:13px;color:#8248ef}.success p{font-size:13px;color:#53575d}.validation-action{margin-top:30px;display:flex;align-items:center;flex-wrap:wrap;gap:10px;color:#777c82;font-size:11px}.primary{border:0;border-radius:6px;background:#7c3aed;color:#fff;padding:12px 18px;display:flex;align-items:center;gap:8px;font-weight:700;cursor:pointer}.primary svg{width:16px}.primary:hover{background:#6d2fda}.primary:disabled,.skip-button:disabled{opacity:.55;cursor:wait}.skip-button{border:1px solid #c7cbd0;border-radius:6px;background:#fff;color:#62676d;padding:11px 14px;display:flex;align-items:center;gap:7px;font-size:11px;font-weight:700;cursor:pointer}.skip-button:hover{border-color:#ad7b2d;color:#875e1c;background:#fffaf1}.skip-button svg{width:14px}.validation-action>span{margin-left:3px}.step-navigation{margin-top:32px;padding-top:16px;border-top:1px solid #e3e5e8;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px}.step-navigation span{color:#858a91;font:600 10px monospace}.step-navigation button{border:0;background:transparent;color:#635078;padding:8px;font-size:11px;font-weight:700;cursor:pointer}.step-navigation button:first-child{text-align:left}.step-navigation button:last-child{text-align:right}.step-navigation button:disabled{color:#bec2c7;cursor:not-allowed}.feedback{min-height:88px;border-top:1px solid #d8dce0;padding:18px 24px;display:flex;align-items:center;gap:12px}.feedback>svg{width:26px}.feedback.success>svg{color:#28b653}.feedback.error>svg{color:#e15c45}.feedback.skipped>svg{color:#c2872b}.feedback strong{font-size:13px}.feedback p{margin:4px 0 0;color:#646970;font-size:12px}.feedback button{margin-left:auto;border:1px solid #b8bdc4;background:#fff;border-radius:5px;padding:8px 12px;cursor:pointer}.validation-checks{display:flex;flex-wrap:wrap;gap:7px;margin:10px 0 0;padding:0;list-style:none}.validation-checks li{min-width:150px;display:flex;align-items:flex-start;gap:6px;padding:7px 9px;border:1px solid #dce0e4;border-radius:5px;background:#fafbfb}.validation-checks li>svg{flex:none;width:14px;height:14px;margin-top:1px}.validation-checks li.ok>svg{color:#27a449}.validation-checks li.failed>svg{color:#d4523e}.validation-checks li strong{display:block;font-size:10px}.validation-checks li small{display:block;margin-top:2px;color:#73787e;font-size:9px;line-height:1.4}.course-complete{margin-left:auto;display:flex;align-items:center;gap:7px;color:#6c3cbc;font-size:12px;font-weight:700}.course-complete svg{width:18px}.terminal-pane{min-width:0;min-height:0;display:flex;flex-direction:column;background:#0c0f12}.terminal-title{height:54px;flex:none;color:#dde0e3;border-bottom:1px solid #292e33;display:flex;justify-content:space-between;align-items:center;padding:0 17px;font-size:13px}.terminal-title span,.terminal-title button{display:flex;align-items:center;gap:8px}.terminal-title svg{width:17px}.terminal-title button{color:#aeb3b9;background:transparent;border:0;cursor:pointer}.terminal-host{flex:1;min-height:0;padding:14px 6px 10px 14px}.xterm{height:100%}.boot{height:100vh;display:grid;place-content:center;justify-items:center;color:#e9e5f3;background:#0e1115;text-align:center;padding:24px}.boot h1{margin:18px 0 6px;font-size:22px}.boot p{color:#c2c6cb}.boot small{color:#747b84}.boot button{margin-top:12px;border:1px solid #6e5b91;border-radius:6px;background:#271b3d;color:#fff;padding:10px 14px;display:flex;gap:7px;align-items:center;cursor:pointer}.boot svg{color:#9d69ff}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.toast{position:fixed;right:20px;bottom:20px;z-index:20;max-width:min(380px,calc(100vw - 40px));display:flex;align-items:center;gap:9px;padding:12px 14px;border-radius:7px;color:#fff;background:#20252a;border:1px solid #41474e;box-shadow:0 10px 32px #0005;font-size:12px;animation:toast-in .2s ease-out}.toast svg{width:17px}.toast.success svg{color:#60dc79}.toast.error svg{color:#ff8069}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}}.catalog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;display:grid;place-items:center;padding:24px;background:#07090dbd;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.catalog-dialog{width:min(1120px,100%);max-height:min(880px,calc(100dvh - 48px));display:flex;flex-direction:column;overflow:hidden;border:1px solid #454b54;border-radius:13px;background:#101419;color:#f5f6f7;box-shadow:0 28px 80px #000a}.catalog-dialog>header{flex:none;display:flex;justify-content:space-between;align-items:flex-start;gap:24px;padding:25px 28px 21px;border-bottom:1px solid #30363d;background:linear-gradient(135deg,#1d172a,#101419 55%)}.catalog-dialog>header span{display:flex;align-items:center;gap:7px;color:#a879ff;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.08em}.catalog-dialog>header span svg{width:14px}.catalog-dialog>header h2{margin:8px 0 6px;font-size:24px;letter-spacing:-.025em}.catalog-dialog>header p{margin:0;color:#969da6;font-size:12px}.catalog-dialog>header>button{flex:none;border:1px solid #4e555e;border-radius:6px;background:#151a20;color:#bfc4ca;padding:8px;cursor:pointer}.catalog-dialog>header>button svg{display:block;width:18px}.catalog-grid{overflow-y:auto;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:18px}.course-card{min-height:260px;padding:17px;border:1px solid #353b43;border-radius:9px;background:#161b21}.course-card.active{border-color:#7551b7;background:linear-gradient(145deg,#241b35,#161b21 68%)}.course-card-top{display:flex;justify-content:space-between;align-items:center;gap:8px}.course-card-top .course-delivery{display:flex;align-items:center;gap:5px;color:#9da4ad;font-size:9px;font-weight:700}.course-delivery svg{width:12px}.course-readiness{padding:3px 6px;border-radius:10px;color:#d6b8ff;background:#7045a72b;font-size:8px;font-weight:800}.course-card.ready .course-readiness{color:#80dfa0;background:#3ba15c24}.course-card.requires-integration .course-readiness{color:#e9b566;background:#b77c2525}.course-card h3{margin:17px 0 8px;font-size:16px}.course-card>p{min-height:54px;margin:0;color:#aeb4bb;font-size:11px;line-height:1.58}.course-meta{display:flex;gap:8px;margin-top:12px}.course-meta span{padding:3px 7px;border:1px solid #424951;border-radius:4px;color:#aab0b7;font-size:9px}.course-card>ul{margin:13px 0 0;padding:0;list-style:none}.course-card>ul li{display:flex;gap:6px;align-items:flex-start;margin-top:6px;color:#c8ccd1;font-size:10px;line-height:1.4}.course-card>ul svg{flex:none;width:11px;color:#61c879}.course-card details{margin-top:13px;padding-top:10px;border-top:1px solid #323840;color:#c4a25f;font-size:9px}.course-card details summary{cursor:pointer;font-weight:800}.course-card details p{margin:7px 0 0;color:#9ea4ab;line-height:1.5}.catalog-empty{min-height:320px;display:grid;place-content:center;justify-items:center;gap:8px;color:#8f969f;text-align:center}.catalog-empty svg{color:#a879ff}.catalog-empty p{margin:0}.catalog-empty button{border:1px solid #7054a0;border-radius:5px;background:#2b2040;color:#fff;padding:8px 12px;cursor:pointer}.mobile-steps-backdrop,.mobile-switch{display:none}@media(max-width:1247px){.app-shell{grid-template-columns:1fr;grid-template-rows:60px 44px 1fr}.sidebar{display:none}.brand{width:auto;gap:8px;padding:0 12px;border:0;font-size:16px}.current{display:none}.top-actions{min-width:0;gap:8px;padding-right:10px}.timer{display:none}.environment{font-size:11px}.top-actions>.secondary,.top-actions>.icon-action,.app-user{display:none}.mobile-actions{display:block}.mobile-switch{display:flex;grid-row:2;background:#15191e;padding:4px}.mobile-switch button{flex:1;border:0;background:transparent;color:#9fa5ac;border-radius:4px;display:flex;align-items:center;justify-content:center;gap:7px;font-size:12px}.mobile-switch button.active{background:#30234f;color:#fff}.mobile-switch svg{width:15px}.guide,.terminal-pane{grid-column:1;grid-row:3}.mobile-hidden{display:none}.guide-inner{padding:18px 18px 36px}.terminal-title{height:46px}.lab-overview{margin-bottom:22px}.lab-overview-body{padding-left:15px}.command-block>div{align-items:stretch;flex-direction:column}.command-actions{min-height:40px;border-top:1px solid #d9dce0}.command-actions button{flex:1;border-left:0}.command-actions button+button{border-left:1px solid #d9dce0}.validation-action>span{width:100%;margin:0}.feedback{padding:14px 16px;flex-wrap:wrap}.feedback>div{flex:1;min-width:180px}.feedback p{max-width:none}.feedback button,.course-complete{margin-left:38px}.mobile-steps-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;display:flex;align-items:flex-end;background:#05070a99}.mobile-steps-drawer{width:100%;max-height:min(78dvh,700px);display:flex;flex-direction:column;background:#11161b;color:#fff;border-radius:14px 14px 0 0;box-shadow:0 -12px 36px #0008}.mobile-steps-drawer header{flex:none;display:flex;justify-content:space-between;align-items:center;padding:17px 18px;border-bottom:1px solid #333941}.mobile-steps-drawer header strong{display:block;font-size:15px}.mobile-steps-drawer header span{display:block;margin-top:3px;color:#89919a;font-size:10px}.mobile-steps-drawer header button{border:0;background:transparent;color:#b9bfc6;padding:4px}.mobile-steps-drawer header svg{width:19px}.mobile-step-list{overflow-y:auto;padding:8px 10px 20px}.mobile-step-list>button{width:100%;display:grid;grid-template-columns:30px 1fr;gap:10px;align-items:center;border:0;border-left:3px solid transparent;border-radius:5px;background:transparent;color:#c5c9ce;padding:9px 10px;text-align:left}.mobile-step-list>button.active{background:#30234f;border-left-color:#995dff;color:#fff}.mobile-step-list>button[aria-disabled=true]{color:#626970}.mobile-step-list>button>span{width:22px;height:22px;display:grid;place-items:center;border:1px solid #565d65;border-radius:50%;font-size:9px}.mobile-step-list svg{width:11px}.mobile-step-list small{display:block;color:#8070a2;font:700 8px monospace}.mobile-step-list strong{display:block;margin-top:2px;font-size:11px}.toast{right:12px;bottom:12px}.catalog-backdrop{padding:0;place-items:stretch}.catalog-dialog{width:100%;max-height:100dvh;border:0;border-radius:0}.catalog-dialog>header{padding:18px}.catalog-grid{grid-template-columns:1fr;padding:12px}.course-card>p{min-height:0}}@media(min-width:1248px)and (max-width:1540px){.catalog-button{font-size:0;padding:8px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}.vl-login-shell,.vl-admin-shell,.vl-operations{--vl-bg: #0b0e11;--vl-bg-raised: #11161b;--vl-surface: #ffffff;--vl-subtle: #f6f7f9;--vl-border: #e1e4e8;--vl-border-dark: #30363d;--vl-text: #17191d;--vl-muted: #666d76;--vl-muted-dark: #939aa3;--vl-violet: #7c3aed;--vl-violet-dark: #6425d0;--vl-violet-pale: #f1ebff;--vl-green: #198a3b;--vl-green-pale: #e9f7ed;--vl-amber: #9a6614;--vl-amber-pale: #fff4df;--vl-red: #c33b2e;--vl-red-pale: #fff0ed;font-family:Inter,Pretendard,Noto Sans KR,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:var(--vl-text);font-synthesis:none}.vl-login-shell *,.vl-admin-shell *,.vl-operations *{box-sizing:border-box}.vl-login-shell button,.vl-login-shell input,.vl-admin-shell button,.vl-admin-shell input,.vl-admin-shell select,.vl-operations button,.vl-operations input,.vl-operations select,.vl-operations textarea{font:inherit}.vl-login-shell button:focus-visible,.vl-login-shell input:focus-visible,.vl-admin-shell button:focus-visible,.vl-admin-shell input:focus-visible,.vl-admin-shell select:focus-visible,.vl-admin-shell a:focus-visible,.vl-operations button:focus-visible,.vl-operations input:focus-visible,.vl-operations select:focus-visible,.vl-operations textarea:focus-visible{outline:2px solid #9b69ff;outline-offset:2px}.vl-brand{display:flex;align-items:center;gap:12px;font-size:18px;font-weight:750;letter-spacing:-.02em}.vl-brand--light{color:#fff}.vl-brand-mark{display:grid;width:30px;height:34px;place-items:center;color:#c29aff;border:1px solid #9862f4;border-radius:8px 8px 10px 10px;background:#7c3aed14;font:750 14px/1 ui-monospace,SFMono-Regular,Menlo,monospace}.vl-spin{animation:vl-spin .9s linear infinite}@keyframes vl-spin{to{transform:rotate(360deg)}}.vl-sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.vl-login-shell{min-height:100vh;min-height:100dvh;display:grid;grid-template-columns:minmax(420px,.92fr) minmax(520px,1.08fr);background:var(--vl-surface)}.vl-login-story{position:relative;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;overflow:hidden;padding:clamp(28px,4vw,58px);color:#fff;background:radial-gradient(circle at 88% 12%,rgba(131,73,244,.25),transparent 34%),linear-gradient(145deg,#080a0d,#10151a 66%,#171124)}.vl-login-story:after{content:"";position:absolute;right:-130px;bottom:-150px;width:390px;height:390px;border:1px solid rgba(166,113,255,.2);transform:rotate(30deg);pointer-events:none}.vl-login-story__content{position:relative;z-index:1;width:min(570px,100%);margin:auto 0;padding:72px 0}.vl-login-story h1{max-width:540px;margin:0 0 24px;color:#fff;font-size:clamp(40px,4.6vw,70px);line-height:1.04;letter-spacing:-.055em;word-break:keep-all}.vl-login-story__content>p{max-width:545px;margin:0;color:#b8bec6;font-size:clamp(15px,1.3vw,18px);line-height:1.8}.vl-course-facts{display:grid;gap:1px;margin-top:clamp(42px,6vh,72px);border-top:1px solid var(--vl-border-dark);border-bottom:1px solid var(--vl-border-dark)}.vl-course-facts>div{display:grid;grid-template-columns:26px 1fr;align-items:center;gap:14px;padding:17px 2px;border-bottom:1px solid var(--vl-border-dark)}.vl-course-facts>div:last-child{border-bottom:0}.vl-course-facts svg{width:20px;color:#aa78ff}.vl-course-facts span{display:flex;align-items:baseline;gap:12px;color:#929aa4;font-size:12px}.vl-course-facts strong{min-width:150px;color:#f5f3f8;font-size:13px}.vl-login-story__note{position:relative;z-index:1;display:flex;align-items:center;gap:8px;margin:0;color:#8e969f;font-size:11px}.vl-login-story__note svg{width:16px;color:#a772ff}.vl-login-panel{display:grid;place-items:center;padding:48px clamp(32px,7vw,108px);background:#fff}.vl-login-card{width:min(430px,100%)}.vl-login-mobile-brand{display:none}.vl-login-icon{width:48px;height:48px;display:grid;place-items:center;margin-bottom:25px;color:var(--vl-violet);border:1px solid #d9c9fb;border-radius:10px;background:var(--vl-violet-pale)}.vl-login-icon svg{width:22px}.vl-login-card h2{margin:0;font-size:clamp(28px,3vw,36px);line-height:1.18;letter-spacing:-.04em}.vl-login-intro{margin:13px 0 34px;color:var(--vl-muted);font-size:13px;line-height:1.7}.vl-login-mode{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin:-12px 0 26px;padding:4px;border:1px solid #e0e3e7;border-radius:8px;background:#f4f5f7}.vl-login-mode button{min-height:39px;padding:8px 10px;color:#727881;border:0;border-radius:5px;background:transparent;font-size:11px;font-weight:700;cursor:pointer;transition:color .16s ease,background .16s ease,box-shadow .16s ease}.vl-login-mode button:hover:not(.is-active){color:#4e3a6a;background:#ebe7f3}.vl-login-mode button.is-active{color:#5f26bf;background:#fff;box-shadow:0 1px 5px #1b1f241a}.vl-field{display:block;margin-top:19px}.vl-field>label{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:8px;color:#33373c;font-size:12px;font-weight:700}.vl-field small{color:#8b9199;font-size:9px;font-weight:500}.vl-input-wrap{position:relative;display:flex;align-items:center}.vl-input-wrap>svg{position:absolute;left:14px;width:17px;color:#8a9097;pointer-events:none}.vl-input-wrap input{width:100%;min-height:48px;padding:12px 45px 12px 43px;color:var(--vl-text);border:1px solid #cdd1d6;border-radius:7px;background:#fff;font-size:13px;transition:border-color .16s ease,box-shadow .16s ease}.vl-input-wrap input::placeholder{color:#a3a8ae}.vl-input-wrap input:hover{border-color:#9da3aa}.vl-input-wrap input:focus{border-color:var(--vl-violet);box-shadow:0 0 0 3px #7c3aed1a;outline:0}.vl-password-toggle{position:absolute;right:7px;width:35px;height:35px;display:grid;place-items:center;padding:0;color:#7a8088;border:0;border-radius:5px;background:transparent;cursor:pointer}.vl-password-toggle:hover{color:var(--vl-violet);background:var(--vl-violet-pale)}.vl-password-toggle svg{width:17px}.vl-form-message{min-height:36px;margin-top:11px;padding:8px 10px;color:transparent;border:1px solid transparent;border-radius:5px;font-size:11px;line-height:1.6}.vl-form-message.is-visible{color:var(--vl-red);border-color:#f1c7c1;background:var(--vl-red-pale)}.vl-login-submit{width:100%;min-height:49px;display:flex;align-items:center;justify-content:center;gap:9px;margin-top:5px;color:#fff;border:0;border-radius:7px;background:var(--vl-violet);box-shadow:0 8px 20px #5b24bb29;font-size:13px;font-weight:750;cursor:pointer;transition:background .16s ease,transform .16s ease}.vl-login-submit:hover:not(:disabled){background:var(--vl-violet-dark);transform:translateY(-1px)}.vl-login-submit:disabled{opacity:.66;cursor:wait}.vl-login-submit svg{width:17px}.vl-login-help{margin:24px 0 0;padding-top:20px;color:#858b93;border-top:1px solid var(--vl-border);font-size:10px;line-height:1.6;text-align:center}.vl-account-state{width:fit-content;margin-top:5px!important;padding:2px 5px;color:var(--vl-red)!important;border:1px solid #efc2bc;border-radius:4px;background:var(--vl-red-pale);font-size:8px!important;font-style:normal;font-weight:750}.vl-admin-shell{min-height:100vh;min-height:100dvh;display:grid;grid-template-columns:224px minmax(0,1fr);background:#f4f5f7}.vl-admin-sidebar{position:sticky;top:0;height:100vh;height:100dvh;display:flex;flex-direction:column;padding:22px 14px 15px;color:#d9dde2;border-right:1px solid #282d33;background:var(--vl-bg)}.vl-admin-sidebar>.vl-brand{padding:3px 8px 28px}.vl-admin-sidebar nav{display:grid;gap:4px;border-top:1px solid #292f35;padding-top:18px}.vl-admin-sidebar nav a{display:flex;align-items:center;gap:11px;padding:11px 12px;color:#9ca3ac;border-left:3px solid transparent;border-radius:5px;font-size:12px;font-weight:650;text-decoration:none}.vl-admin-sidebar nav a:hover{color:#fff;background:#171c22}.vl-admin-sidebar nav a.is-active{color:#fff;border-left-color:#9b62ff;background:#30204e}.vl-admin-sidebar nav svg{width:17px}.vl-admin-sidebar__account{display:grid;grid-template-columns:34px minmax(0,1fr) 30px;align-items:center;gap:9px;margin-top:auto;padding:14px 7px 2px;border-top:1px solid #292f35}.vl-admin-sidebar__account>span{width:32px;height:32px;display:grid;place-items:center;color:#bc91ff;border:1px solid #57416f;border-radius:50%;background:#251b30}.vl-admin-sidebar__account>span svg{width:16px}.vl-admin-sidebar__account strong,.vl-admin-sidebar__account small{display:block}.vl-admin-sidebar__account strong{overflow:hidden;color:#f5f6f7;font-size:11px;text-overflow:ellipsis;white-space:nowrap}.vl-admin-sidebar__account small{margin-top:3px;color:#767e88;font-size:9px}.vl-admin-sidebar__account button{width:30px;height:30px;display:grid;place-items:center;padding:0;color:#8e959e;border:0;border-radius:5px;background:transparent;cursor:pointer}.vl-admin-sidebar__account button:hover{color:#fff;background:#242a30}.vl-admin-sidebar__account button svg{width:15px}.vl-admin-main{min-width:0;padding:34px clamp(24px,4vw,58px) 58px}.vl-admin-header{display:flex;align-items:flex-start;gap:24px;max-width:1500px;margin:0 auto 30px}.vl-admin-header>div:not(.vl-admin-mobile-brand){min-width:0}.vl-admin-mobile-brand,.vl-admin-mobile-actions{display:none}.vl-admin-header h1{margin:0;color:var(--vl-text);font-size:clamp(27px,3vw,37px);line-height:1.16;letter-spacing:-.045em}.vl-admin-header p{margin:10px 0 0;color:var(--vl-muted);font-size:12px;line-height:1.6}.vl-admin-header p span{margin-left:12px;padding-left:12px;color:#8d939a;border-left:1px solid #cdd1d5;font-size:10px}.vl-admin-header>button{margin-left:auto}.vl-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:39px;padding:9px 13px;border-radius:6px;font-size:11px;font-weight:700;white-space:nowrap;cursor:pointer}.vl-button svg{width:15px}.vl-button--secondary{color:#4d535a;border:1px solid #c8cdd2;background:#fff}.vl-button--secondary:hover:not(:disabled){color:var(--vl-violet);border-color:#aa8fe0;background:#fbf9ff}.vl-button--primary{color:#fff;border:1px solid var(--vl-violet);background:var(--vl-violet)}.vl-button:disabled{opacity:.58;cursor:wait}.vl-admin-state{min-height:420px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;max-width:1500px;margin:0 auto;color:#777e86;border:1px solid var(--vl-border);background:#fff}.vl-admin-state>svg{width:30px;margin-bottom:5px;color:var(--vl-violet)}.vl-admin-state strong{color:#2c3035;font-size:14px}.vl-admin-state span{font-size:11px}.vl-admin-state .vl-button{margin-top:13px}.vl-admin-state--error>svg{color:var(--vl-red)}.vl-inline-alert{max-width:1500px;display:flex;align-items:center;gap:10px;margin:0 auto 18px;padding:10px 12px;color:#863126;border:1px solid #efc7c1;border-radius:6px;background:var(--vl-red-pale);font-size:11px}.vl-inline-alert svg{width:16px;flex:none}.vl-inline-alert button{margin-left:auto;color:#7c2e25;border:0;background:transparent;font-size:10px;font-weight:700;text-decoration:underline;cursor:pointer}.vl-metric-rail{max-width:1500px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:0 auto;color:var(--vl-text);border:1px solid #d9dde2;border-top:3px solid var(--vl-violet);background:#fff;box-shadow:0 7px 24px #14181e09}.vl-metric-rail>div{min-width:0;padding:20px 23px;border-right:1px solid var(--vl-border)}.vl-metric-rail>div:last-child{border-right:0}.vl-metric-rail span,.vl-metric-rail small{display:block}.vl-metric-rail span{color:#676e76;font-size:10px;font-weight:700}.vl-metric-rail strong{display:block;margin:7px 0 5px;color:#1c2024;font-size:27px;letter-spacing:-.035em}.vl-metric-rail small{color:#969ca3;font-size:9px}.vl-metric-rail .needs-attention strong{color:var(--vl-amber)}.vl-cohort-section,.vl-learners-section{max-width:1500px;margin:34px auto 0}.vl-section-heading{display:flex;align-items:end;justify-content:space-between;gap:22px;margin-bottom:13px}.vl-section-heading h2{margin:0;color:#22262a;font-size:16px;letter-spacing:-.025em}.vl-section-heading p{margin:5px 0 0;color:#7d838b;font-size:10px}.vl-cohort-list{display:flex;gap:8px;overflow-x:auto;padding:1px 1px 5px;scrollbar-width:thin}.vl-cohort-list button{min-width:184px;max-width:260px;display:block;padding:13px 15px;color:#4d535a;border:1px solid #d6dade;border-radius:7px;background:#fff;text-align:left;cursor:pointer}.vl-cohort-list button:hover{border-color:#a693c9}.vl-cohort-list button.is-selected{color:#fff;border-color:#34244e;background:#2d2044}.vl-cohort-list strong,.vl-cohort-list span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vl-cohort-list strong{font-size:11px}.vl-cohort-list span{margin-top:6px;color:#8b9198;font-size:9px}.vl-cohort-list button.is-selected span{color:#c8b8e3}.vl-table-tools{display:flex;align-items:center;gap:8px}.vl-search{position:relative;display:flex;align-items:center}.vl-search svg{position:absolute;left:11px;width:14px;color:#858c94}.vl-search input,.vl-select select{min-height:38px;color:#3d4248;border:1px solid #ccd1d6;border-radius:6px;background-color:#fff;font-size:10px}.vl-search input{width:220px;padding:8px 11px 8px 33px}.vl-select select{min-width:118px;padding:8px 28px 8px 10px}.vl-table-wrap{overflow-x:auto;border:1px solid #d8dce1;background:#fff;box-shadow:0 7px 25px #14181e06}.vl-learners-table{width:100%;border-collapse:collapse;table-layout:auto}.vl-learners-table th{padding:11px 14px;color:#747b84;border-bottom:1px solid #d8dce1;background:#f7f8f9;font-size:9px;font-weight:750;letter-spacing:.025em;text-align:left;white-space:nowrap}.vl-learners-table td{padding:15px 14px;color:#363b40;border-bottom:1px solid #ebedef;font-size:10px;vertical-align:middle}.vl-learners-table tbody tr:last-child td{border-bottom:0}.vl-learners-table tbody tr:hover{background:#fcfbff}.vl-learner{min-width:195px;display:grid;grid-template-columns:34px minmax(0,1fr);align-items:center;gap:10px}.vl-learner>span{width:34px;height:34px;display:grid;place-items:center;color:#6f35d3;border:1px solid #dccdfa;border-radius:50%;background:var(--vl-violet-pale);font-size:12px;font-weight:800}.vl-learner strong,.vl-learner small,.vl-learner em{display:block;max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vl-learner strong{color:#22262a;font-size:11px}.vl-learner small{margin-top:3px;color:#7d838b;font-size:9px}.vl-learner em{margin-top:4px;color:#7652ac;font-size:8px;font-style:normal;font-weight:650}.vl-status{display:inline-flex;align-items:center;gap:5px;padding:4px 7px;border-radius:4px;font-size:9px;font-weight:750;white-space:nowrap}.vl-status svg{width:11px}.vl-status--active{color:#197b38;background:var(--vl-green-pale)}.vl-status--idle,.vl-status--provisioning{color:#8a5c13;background:var(--vl-amber-pale)}.vl-status--offline,.vl-status--none{color:#687079;background:#eef0f2}.vl-status--expired,.vl-status--error{color:#a9362c;background:var(--vl-red-pale)}.vl-cell-note{display:block;margin-top:6px;color:#9399a0;font-size:8px;white-space:nowrap}.vl-progress-cell{min-width:130px}.vl-progress-cell>div{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.vl-progress-cell strong{color:#2b3035;font-size:11px}.vl-progress-cell span{color:#878e96;font-size:8px;white-space:nowrap}.vl-progress-track{height:4px;display:block;overflow:hidden;margin-top:7px;border-radius:4px;background:#e7e9ec}.vl-progress-track i{height:100%;display:block;border-radius:inherit;background:var(--vl-violet)}.vl-attempts{min-width:82px;display:grid;gap:6px}.vl-attempts span{display:flex;align-items:center;gap:5px;color:#717880;font-size:9px;white-space:nowrap}.vl-attempts svg{width:12px;color:#4a9b5c}.vl-attempts span.is-warning{color:var(--vl-amber);font-weight:700}.vl-attempts span.is-warning svg{color:var(--vl-amber)}.vl-ttl,.vl-expired{min-width:105px;display:flex;align-items:center;gap:5px;color:#4c535a;font-size:9px;white-space:nowrap}.vl-ttl svg,.vl-expired svg{width:12px}.vl-expired{color:var(--vl-red)}.vl-row-actions{display:flex;justify-content:flex-end;gap:4px;min-width:104px}.vl-row-actions button{min-width:31px;height:31px;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:0 7px;color:#596068;border:1px solid #d0d5d9;border-radius:5px;background:#fff;cursor:pointer}.vl-row-actions button:hover:not(:disabled){color:var(--vl-violet);border-color:#b69ce3;background:#faf8ff}.vl-row-actions button.is-danger:hover:not(:disabled){color:var(--vl-red);border-color:#e9b6b0;background:var(--vl-red-pale)}.vl-row-actions button:disabled{opacity:.4;cursor:not-allowed}.vl-row-actions svg{width:13px}.vl-row-actions span{display:none;font-size:9px;font-weight:700;white-space:nowrap}.vl-empty-state{min-height:250px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;color:#8a9098;border:1px solid #d8dce1;background:#fff;text-align:center}.vl-empty-state>svg{width:27px;margin-bottom:5px;color:#a16df4}.vl-empty-state strong{color:#34393f;font-size:12px}.vl-empty-state span{max-width:380px;font-size:10px;line-height:1.6}.vl-empty-state button{margin-top:8px;color:var(--vl-violet);border:0;background:transparent;font-size:10px;font-weight:700;text-decoration:underline;cursor:pointer}.vl-admin-toast{position:fixed;right:22px;bottom:22px;z-index:50;max-width:min(390px,calc(100vw - 36px));display:flex;align-items:center;gap:9px;padding:12px 14px;color:#f7f8f9;border:1px solid #41474e;border-radius:7px;background:#1e2328;box-shadow:0 12px 35px #00000047;font-size:11px;animation:vl-toast-in .18s ease-out}.vl-admin-toast svg{width:16px}.vl-admin-toast--success svg{color:#68d47c}.vl-admin-toast--error svg{color:#ff7b6c}@keyframes vl-toast-in{0%{opacity:0;transform:translateY(7px)}}.vl-operations{width:100%;max-width:1500px;margin:0 auto;color:var(--vl-text);border:1px solid #d9dde2;background:#fff;box-shadow:0 8px 28px #14181e09}.vl-ops-header{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding:25px 27px 21px}.vl-ops-header h2{margin:0;color:#202428;font-size:19px;letter-spacing:-.03em}.vl-ops-header p{margin:7px 0 0;color:#747b83;font-size:10px;line-height:1.6}.vl-ops-role{display:inline-flex;align-items:center;gap:6px;flex:none;padding:6px 8px;color:#6033a5;border:1px solid #d9caf2;border-radius:5px;background:#f6f1ff;font-size:9px;font-weight:750}.vl-ops-role svg{width:13px}.vl-ops-tabs{display:flex;gap:3px;padding:0 27px;border-bottom:1px solid #dfe2e6}.vl-ops-tabs button{position:relative;min-height:44px;display:inline-flex;align-items:center;gap:7px;padding:10px 15px;color:#747b83;border:0;background:transparent;font-size:10px;font-weight:720;cursor:pointer}.vl-ops-tabs button:after{content:"";position:absolute;right:10px;bottom:-1px;left:10px;height:2px;background:transparent}.vl-ops-tabs button:hover{color:#4f2b88;background:#faf8ff}.vl-ops-tabs button.is-active{color:#672bc6}.vl-ops-tabs button.is-active:after{background:var(--vl-violet)}.vl-ops-tabs svg{width:15px}.vl-ops-panel{min-height:430px}.vl-ops-split{display:grid;grid-template-columns:minmax(280px,350px) minmax(0,1fr)}.vl-ops-form{min-width:0;padding:25px 27px 29px;border-right:1px solid #e2e5e8;background:#fafbfc}.vl-ops-form-heading{display:grid;grid-template-columns:35px minmax(0,1fr);align-items:center;gap:11px;margin-bottom:24px}.vl-ops-form-heading>span{width:34px;height:34px;display:grid;place-items:center;color:#7236d4;border:1px solid #d9c8f6;border-radius:7px;background:#f2ebff}.vl-ops-form-heading svg{width:16px}.vl-ops-form-heading h3,.vl-ops-list-heading h3,.vl-catalog-toolbar h3{margin:0;color:#2c3035;font-size:12px;letter-spacing:-.015em}.vl-ops-form-heading p,.vl-ops-list-heading p,.vl-catalog-toolbar p{margin:4px 0 0;color:#858c94;font-size:9px;line-height:1.45}.vl-ops-form>label{display:block;margin-top:15px}.vl-ops-form>label>span,.vl-ops-form-row label>span{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:7px;color:#464b51;font-size:10px;font-weight:700}.vl-ops-form label small{color:#979da4;font-size:8px;font-weight:500}.vl-ops-form input,.vl-ops-form select{width:100%;min-height:40px;padding:9px 11px;color:#292d31;border:1px solid #cdd2d7;border-radius:6px;background:#fff;font-size:10px}.vl-ops-form input::placeholder{color:#a0a6ad}.vl-ops-form input:hover,.vl-ops-form select:hover{border-color:#aeb4bb}.vl-ops-form input:focus,.vl-ops-form select:focus{border-color:#8f58e7;box-shadow:0 0 0 3px #7c3aed14;outline:0}.vl-ops-form-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:15px}.vl-ops-form-row label{position:relative}.vl-ops-form-row label>small{position:absolute;right:11px;bottom:12px;color:#8d939a;pointer-events:none}.vl-ops-form-row input{padding-right:32px}.vl-ops-form-error{margin:14px 0 0;padding:9px 10px;color:#9e3329;border:1px solid #f0c6c0;border-radius:5px;background:#fff2ef;font-size:9px;line-height:1.55}.vl-ops-primary{min-height:39px;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:9px 13px;color:#fff;border:1px solid var(--vl-violet);border-radius:6px;background:var(--vl-violet);font-size:10px;font-weight:750;cursor:pointer}.vl-ops-form>.vl-ops-primary{width:100%;margin-top:20px}.vl-ops-primary:hover:not(:disabled){border-color:var(--vl-violet-dark);background:var(--vl-violet-dark)}.vl-ops-primary:disabled{opacity:.5;cursor:not-allowed}.vl-ops-primary svg{width:14px}.vl-ops-list-section{min-width:0;padding:25px 27px 30px}.vl-ops-list-heading{min-height:35px;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.vl-ops-list-heading>button{width:31px;height:31px;display:grid;place-items:center;flex:none;padding:0;color:#6f767e;border:1px solid #d0d4d9;border-radius:5px;background:#fff;cursor:pointer}.vl-ops-list-heading>button:hover:not(:disabled){color:var(--vl-violet);border-color:#b69ce3}.vl-ops-list-heading>button:disabled{opacity:.55}.vl-ops-list-heading>button svg{width:13px}.vl-ops-empty{min-height:225px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;color:#8a9199;border:1px dashed #d3d7dc;background:#fafbfc;text-align:center}.vl-ops-empty>svg{width:25px;margin-bottom:3px;color:#9c6fe1}.vl-ops-empty strong{color:#41464c;font-size:10px}.vl-ops-empty span{max-width:330px;font-size:9px;line-height:1.55}.vl-ops-cohort-list,.vl-ops-invite-list{max-height:430px;overflow-y:auto;margin:0;padding:0;border-top:1px solid #e1e4e7;list-style:none}.vl-ops-cohort-list li{display:grid;grid-template-columns:34px minmax(0,1fr) auto;align-items:center;gap:11px;padding:14px 3px;border-bottom:1px solid #e9ebed}.vl-ops-list-icon{width:32px;height:32px;display:grid;place-items:center;color:#7440c8;border-radius:6px;background:#f0eafa}.vl-ops-list-icon svg{width:15px}.vl-ops-cohort-list strong,.vl-ops-cohort-list span,.vl-ops-cohort-list small{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vl-ops-cohort-list strong{color:#30353a;font-size:10px}.vl-ops-cohort-list li>div>span{margin-top:3px;color:#7450a9;font:650 8px/1.3 ui-monospace,SFMono-Regular,Menlo,monospace}.vl-ops-cohort-list small{margin-top:4px;color:#8a9199;font-size:8px}.vl-ops-cohort-list em{padding:4px 6px;color:#28733a;border-radius:4px;background:#e9f6ec;font-size:8px;font-style:normal;font-weight:700}.vl-ops-cohort-list em.is-archived{color:#6f767e;background:#eef0f2}.vl-invite-code{display:grid;grid-template-columns:minmax(170px,.8fr) minmax(190px,1fr) auto auto;align-items:center;gap:13px;margin:22px 27px 0;padding:13px 14px;color:#ede6fa;border:1px solid #5b417b;border-left:3px solid #a267ff;border-radius:6px;background:#21172e}.vl-invite-code>div{display:flex;align-items:center;gap:9px;min-width:0}.vl-invite-code>div>svg{width:17px;flex:none;color:#b985ff}.vl-invite-code strong,.vl-invite-code small{display:block}.vl-invite-code strong{color:#fff;font-size:10px}.vl-invite-code small{margin-top:3px;color:#a99cb8;font-size:8px}.vl-invite-code code{min-width:0;overflow:hidden;padding:9px 11px;color:#fff;border:1px solid #5b486e;border-radius:4px;background:#140e1c;font-size:12px;font-weight:700;letter-spacing:.06em;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:all;user-select:all}.vl-invite-code>button{min-height:35px;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 10px;color:#fff;border:1px solid #8053bf;border-radius:5px;background:#6f35cd;font-size:9px;font-weight:700;white-space:nowrap;cursor:pointer}.vl-invite-code>button:hover{background:#7c3aed}.vl-invite-code>button.is-copied{color:#c6f2d0;border-color:#3c7b4b;background:#20552c}.vl-invite-code>button svg{width:13px}.vl-invite-code .vl-invite-code-close{color:#c1b7cc;border-color:transparent;background:transparent}.vl-invite-code .vl-invite-code-close:hover{color:#fff;background:#332440}.vl-ops-invite-list li{display:grid;grid-template-columns:minmax(150px,1.15fr) minmax(140px,.85fr) 64px;align-items:center;gap:14px;padding:13px 3px;border-bottom:1px solid #e9ebed}.vl-ops-invite-list li.is-inactive{opacity:.65}.vl-ops-invite-main{min-width:0}.vl-ops-invite-main strong,.vl-ops-invite-main small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vl-ops-invite-main strong{margin-top:5px;color:#33383d;font-size:9px}.vl-ops-invite-main small{margin-top:3px;color:#858c94;font-size:8px}.vl-ops-invite-role{display:inline-block;padding:3px 5px;color:#286e3a;border-radius:3px;background:#e9f5ec;font-size:7px;font-weight:750}.vl-ops-invite-role--instructor{color:#6740a0;background:#f0e9fa}.vl-ops-invite-role--admin{color:#9a4b25;background:#fff0e7}.vl-ops-invite-usage span,.vl-ops-invite-usage small{display:block;color:#60676e;font-size:8px}.vl-ops-invite-usage span{font-weight:700}.vl-ops-invite-usage small{display:flex;align-items:center;gap:4px;margin-top:5px;color:#8a9199}.vl-ops-invite-usage svg{width:10px}.vl-ops-invite-action{justify-self:end}.vl-ops-invite-action button,.vl-ops-invite-action>span{min-height:30px;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:6px 8px;color:#9e3c31;border:1px solid #e5bbb5;border-radius:5px;background:#fff5f3;font-size:8px;font-weight:700;white-space:nowrap}.vl-ops-invite-action button{cursor:pointer}.vl-ops-invite-action button:hover:not(:disabled){color:#fff;background:#b94337}.vl-ops-invite-action button:disabled{opacity:.5}.vl-ops-invite-action>span{color:#767d85;border-color:transparent;background:#eef0f2}.vl-ops-invite-action svg{width:11px}.vl-ops-state{min-height:430px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;color:#858c94;text-align:center}.vl-ops-state>svg{width:27px;margin-bottom:5px;color:var(--vl-violet)}.vl-ops-state strong{color:#34393e;font-size:11px}.vl-ops-state span{font-size:9px}.vl-ops-state button{display:inline-flex;align-items:center;gap:6px;margin-top:8px;padding:8px 10px;color:#fff;border:0;border-radius:5px;background:var(--vl-violet);font-size:9px;font-weight:700;cursor:pointer}.vl-ops-state button svg{width:12px}.vl-ops-state--error>svg{color:var(--vl-red)}.vl-catalog-editor{padding:22px 27px 27px}.vl-catalog-toolbar{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:14px}.vl-catalog-actions{display:flex;align-items:center;gap:7px}.vl-catalog-actions button{min-height:36px;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 10px;color:#5e656d;border:1px solid #cdd2d7;border-radius:5px;background:#fff;font-size:9px;font-weight:700;cursor:pointer}.vl-catalog-actions button:hover:not(:disabled){color:var(--vl-violet);border-color:#b399dd}.vl-catalog-actions .vl-ops-primary{color:#fff;border-color:var(--vl-violet);background:var(--vl-violet)}.vl-catalog-actions button:disabled{opacity:.45;cursor:not-allowed}.vl-catalog-actions svg{width:13px}.vl-catalog-notice{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding:9px 10px;color:#604c7d;border:1px solid #dfd2f1;border-radius:5px;background:#f8f4ff;font-size:9px}.vl-catalog-notice svg{width:14px;flex:none;color:#7c3aed}.vl-catalog-notice strong{margin-right:5px;color:#4f2b85}.vl-catalog-textarea{display:block}.vl-catalog-textarea textarea{width:100%;height:min(55vh,560px);min-height:360px;display:block;resize:vertical;padding:17px 18px;color:#e3e6e9;caret-color:#c79aff;border:1px solid #30363d;border-radius:6px 6px 0 0;background:#0e1216;font:11px/1.65 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;-moz-tab-size:2;tab-size:2;white-space:pre}.vl-catalog-textarea textarea:focus{border-color:#8d54e7;box-shadow:0 0 0 3px #7c3aed1a;outline:0}.vl-catalog-textarea textarea[readonly]{color:#b9bec4;caret-color:transparent}.vl-catalog-meta{min-height:35px;display:flex;align-items:center;gap:15px;padding:7px 11px;color:#8e959d;border:1px solid #30363d;border-top:0;border-radius:0 0 6px 6px;background:#151a1f;font:8px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace}.vl-catalog-meta span:nth-child(2){margin-left:auto}.vl-catalog-meta kbd{padding:3px 5px;color:#b8a3d8;border:1px solid #424951;border-radius:3px;background:#20262c;font:inherit}@media(max-width:900px){.vl-ops-split{grid-template-columns:1fr}.vl-ops-form{border-right:0;border-bottom:1px solid #e2e5e8}.vl-ops-form,.vl-ops-list-section{padding-inline:22px}.vl-ops-cohort-list,.vl-ops-invite-list{max-height:none}.vl-invite-code{grid-template-columns:minmax(160px,1fr) minmax(180px,1fr) auto}.vl-invite-code .vl-invite-code-close{grid-column:1 / -1;min-height:27px}}@media(max-width:620px){.vl-operations{border-right:0;border-left:0}.vl-ops-header{display:block;padding:20px 16px 17px}.vl-ops-role{margin-top:12px}.vl-ops-tabs{display:grid;grid-template-columns:repeat(3,1fr);padding:0 8px}.vl-ops-tabs button{justify-content:center;padding-inline:7px;font-size:9px}.vl-ops-form,.vl-ops-list-section,.vl-catalog-editor{padding:20px 16px 24px}.vl-ops-form-row{gap:8px}.vl-invite-code{grid-template-columns:1fr auto;margin:16px 16px 0}.vl-invite-code>div{grid-column:1 / -1}.vl-invite-code code{grid-column:1 / -1}.vl-invite-code>button:not(.vl-invite-code-close){grid-column:1 / -1}.vl-invite-code .vl-invite-code-close{grid-column:1 / -1}.vl-ops-invite-list li{grid-template-columns:minmax(0,1fr) auto;gap:10px}.vl-ops-invite-usage{grid-column:1}.vl-ops-invite-action{grid-column:2;grid-row:1 / span 2}.vl-catalog-toolbar{display:block}.vl-catalog-actions{margin-top:13px}.vl-catalog-actions button{flex:1}.vl-catalog-textarea textarea{min-height:410px;padding:13px;font-size:10px}.vl-catalog-meta{flex-wrap:wrap;gap:5px 10px}.vl-catalog-meta span:nth-child(2){margin-left:auto}}@media(min-width:1380px){.vl-row-actions button:hover:not(:disabled) span,.vl-row-actions button:focus-visible span{display:inline}}@media(max-width:1020px){.vl-login-shell{grid-template-columns:minmax(340px,.8fr) minmax(450px,1.2fr)}.vl-login-story{padding:32px}.vl-login-story h1{font-size:42px}.vl-course-facts strong{min-width:0}.vl-course-facts span{display:grid;gap:3px}.vl-admin-shell{grid-template-columns:74px minmax(0,1fr)}.vl-admin-sidebar{padding:20px 9px 14px}.vl-admin-sidebar>.vl-brand{justify-content:center;padding-inline:0}.vl-admin-sidebar>.vl-brand>span:last-child,.vl-admin-sidebar nav a:not(.is-active):after,.vl-admin-sidebar nav a{font-size:0}.vl-admin-sidebar nav a{justify-content:center;padding:11px}.vl-admin-sidebar nav svg{width:18px}.vl-admin-sidebar__account{grid-template-columns:1fr;justify-items:center;padding-inline:0}.vl-admin-sidebar__account>div{display:none}.vl-admin-sidebar__account>button{display:grid}.vl-metric-rail{grid-template-columns:repeat(2,minmax(0,1fr))}.vl-metric-rail>div:nth-child(2){border-right:0}.vl-metric-rail>div:nth-child(-n+2){border-bottom:1px solid var(--vl-border)}}@media(max-width:760px){.vl-login-shell{display:block;min-height:100vh;background:#fff}.vl-login-story{display:none}.vl-login-panel{min-height:100vh;min-height:100dvh;align-items:start;padding:26px 20px 40px}.vl-login-card{width:100%;max-width:470px;margin-inline:auto}.vl-login-mobile-brand{display:flex;align-items:center;gap:10px;margin-bottom:clamp(48px,10vh,88px);color:#1d2024;font-size:16px;font-weight:750}.vl-login-mobile-brand .vl-brand-mark{width:27px;height:31px;color:var(--vl-violet);border-color:var(--vl-violet);font-size:12px}.vl-login-icon{width:43px;height:43px;margin-bottom:20px}.vl-login-card h2{font-size:29px}.vl-login-intro{margin-bottom:28px}.vl-admin-shell{display:block}.vl-admin-sidebar{display:none}.vl-admin-main{padding:18px 14px 42px}.vl-admin-header{display:grid;grid-template-columns:1fr auto;gap:19px 12px;margin-bottom:22px}.vl-admin-mobile-brand{grid-column:1 / -1;display:flex;align-items:center;gap:9px;color:#22262a;font-size:14px;font-weight:750}.vl-admin-mobile-actions{display:flex;align-items:center;gap:7px;margin-left:auto}.vl-admin-mobile-actions button{width:38px;height:38px;display:grid;place-items:center;padding:0;color:#60666d;border:1px solid #cbd0d5;border-radius:6px;background:#fff;cursor:pointer}.vl-admin-mobile-actions button:hover{color:var(--vl-violet);border-color:#aa8adb;background:#faf7ff}.vl-admin-mobile-actions button svg{width:16px}.vl-admin-mobile-brand .vl-brand-mark{width:24px;height:28px;color:var(--vl-violet);border-color:var(--vl-violet);font-size:11px}.vl-admin-header h1{font-size:25px}.vl-admin-header p{max-width:470px}.vl-admin-header p span{display:block;margin:5px 0 0;padding:0;border:0}.vl-admin-header .vl-button{min-width:39px;padding:9px;font-size:0}.vl-admin-header .vl-button svg{width:16px}.vl-metric-rail>div{padding:16px}.vl-metric-rail strong{font-size:23px}.vl-section-heading--learners{display:block}.vl-table-tools{margin-top:13px}.vl-search{flex:1}.vl-search input{width:100%}.vl-select select{min-width:108px}.vl-table-wrap{overflow:visible;border:0;background:transparent;box-shadow:none}.vl-learners-table,.vl-learners-table tbody,.vl-learners-table tr,.vl-learners-table td{display:block;width:100%}.vl-learners-table thead{display:none}.vl-learners-table tr{margin-bottom:10px;padding:13px;border:1px solid #d9dde1;border-top:3px solid #cbb4ef;background:#fff}.vl-learners-table td{min-height:37px;display:grid;grid-template-columns:90px minmax(0,1fr);align-items:center;padding:10px 0;border-bottom:1px solid #eceef0}.vl-learners-table td:before{content:attr(data-label);align-self:start;padding-top:2px;color:#858b92;font-size:9px;font-weight:700}.vl-learners-table td:first-child{display:block;padding-top:2px}.vl-learners-table td:first-child:before{display:none}.vl-learners-table td:last-child{display:block;padding-bottom:0;border-bottom:0}.vl-learners-table td:last-child:before{display:none}.vl-learner,.vl-progress-cell{min-width:0}.vl-progress-cell>div{max-width:230px}.vl-progress-cell>.vl-progress-track{max-width:230px}.vl-row-actions{justify-content:stretch;min-width:0}.vl-row-actions button{flex:1}.vl-row-actions button span{display:inline}}@media(max-width:430px){.vl-field>label{display:block}.vl-field small{display:block;margin-top:3px}.vl-metric-rail>div{padding:14px 12px}.vl-metric-rail span{font-size:9px}.vl-metric-rail small{min-height:22px}.vl-table-tools{display:grid;grid-template-columns:1fr 112px}.vl-learners-table td{grid-template-columns:78px minmax(0,1fr)}}@media(prefers-reduced-motion:reduce){.vl-login-shell *,.vl-login-shell *:before,.vl-login-shell *:after,.vl-admin-shell *,.vl-admin-shell *:before,.vl-admin-shell *:after{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}
