@import "https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600&display=swap";:root{color:#e6edf3;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#0b1020;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}*{box-sizing:border-box}body{background:#0b1020;min-height:100vh;margin:0}#root{min-height:100vh}@font-face{font-family:Codex;src:url(/assets/Codex-yYVPV-UvOpTrHY.ttf)format("truetype");font-style:normal;font-weight:400;font-display:swap}.gui-shell,.admin-shell,.admin-login{color:#e6edf3;background:#0b1020;min-height:100vh}.gui-navbar,.admin-header{border-bottom:1px solid #213054;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:20px;padding:18px 24px;display:flex}.gui-navbar-brand{flex-direction:column;align-items:flex-start;gap:10px;min-width:260px;display:flex}.gui-navbar-brand h1{letter-spacing:.06em;margin:0;font-size:clamp(2rem,3vw,2.75rem)}.gui-navbar nav,.admin-header nav,.link-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;display:flex}.gui-navbar nav{width:100%}.gui-navbar nav a{color:#7be4ff;letter-spacing:.06em;background:#7be4ff0a;border:1px solid #7be4ff4d;border-radius:999px;justify-content:center;align-items:center;padding:.7rem 1rem .62rem;font-family:Codex,Courier New,monospace;font-size:.95rem;text-decoration:none;transition:color .2s,border-color .2s,background .2s,box-shadow .2s;display:inline-flex;box-shadow:inset 0 0 0 1px #7be4ff08}.gui-navbar nav a:hover,.gui-navbar nav a.active{color:#d9f8ff;background:#7be4ff1f;border-color:#7be4ffa6;box-shadow:0 0 16px #7be4ff24}.gui-resume-link{color:#7be4ff;letter-spacing:.08em;text-transform:uppercase;background:linear-gradient(135deg,#7be4ff24,#0b1020eb);border:1px solid #7be4ff73;border-radius:999px;justify-content:center;align-items:center;padding:.55rem 1rem .5rem;font-family:Codex,Courier New,monospace;font-size:1rem;text-decoration:none;display:inline-flex;box-shadow:0 0 18px #7be4ff1f}.gui-resume-link:hover{background:linear-gradient(135deg,#7be4ff33,#0b1020f5);border-color:#7be4ff;box-shadow:0 0 24px #7be4ff38}.gui-content,.admin-content,.admin-login{max-width:960px;margin:0 auto;padding:20px}.gui-footer{border-top:1px solid #213054;padding:12px 20px}a,button{color:#7be4ff}.card-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;display:grid}.card,.timeline-item{background:#0f1730;border:1px solid #213054;border-radius:8px;margin-bottom:15px;padding:14px}.card.project-card,.timeline-item,.training-card{box-shadow:none;background:#00000040;border:1px solid #00ffff26;transition:border-color .2s,box-shadow .2s}.card.project-card:hover,.timeline-item:hover,.training-card:hover{border-color:#0ff6;box-shadow:0 0 8px #00ffff14}.simple-form{gap:15px;display:grid}.simple-form input,.simple-form textarea,.simple-form select{color:#e6edf3;background:#101a36;border:1px solid #213054;border-radius:6px;width:100%;margin-top:6px;padding:8px}.meta{opacity:.8;font-size:.9rem}.error-text{color:#ff8a8a}.success-text{color:#85f7a3}.admin-panel-card{background:#0f1730;border:1px solid #213054;border-radius:8px;margin-bottom:18px;padding:14px}.admin-panel-meta{color:#7be4ff;letter-spacing:.06em;text-transform:uppercase;margin:0 0 8px;font-size:.9rem}.markdown-body pre{background:#101a36;padding:10px;overflow-x:auto}.about-page{gap:40px;display:grid}.about-section p{max-width:720px;margin-bottom:12px;line-height:1.75}.skills-list{padding-left:20px;line-height:1.9}.training-grid{gap:16px;display:grid}.training-card{border-radius:8px;padding:16px}.training-card h3{color:#7be4ff;margin:0 0 8px;font-size:1rem}.training-card p{opacity:.85;margin:0;line-height:1.65}.project-links{flex-wrap:wrap;gap:12px;margin-top:8px;display:flex}.home-page{flex-direction:column;justify-content:space-between;min-height:calc(100vh - 56px);display:flex}.home-center{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:40px;padding:60px 20px;display:flex}.home-heading{letter-spacing:.25em;color:#7be4ff;text-shadow:0 0 18px #7be4ff40;margin:0 0 16px;font-size:clamp(2.4rem,6vw,4rem)}.home-subtext{opacity:.65;letter-spacing:.06em;margin:4px 0;font-size:1rem}.home-actions{margin-top:22px}.home-resume-button{color:#e6edf3;letter-spacing:.08em;text-transform:uppercase;background:linear-gradient(135deg,#7be4ff29,#0b1020eb);border:1px solid #7be4ff80;border-radius:999px;justify-content:center;align-items:center;min-width:180px;padding:.85rem 1.2rem;font-family:Codex,Courier New,monospace;text-decoration:none;display:inline-flex;box-shadow:0 0 18px #7be4ff1f}.home-resume-button:hover{border-color:#7be4ff;box-shadow:0 0 24px #7be4ff38}.typewriter-wrap{justify-content:center;align-items:center;gap:2px;min-height:2.4rem;display:flex}.typewriter-text{letter-spacing:.12em;color:#e6edf3;font-size:clamp(1.2rem,3.5vw,1.8rem)}.typewriter-cursor{color:#7be4ff;font-size:1.4rem;animation:1.1s step-start infinite blink}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.scroll-ticker-wrap{white-space:nowrap;opacity:.35;letter-spacing:.1em;border-top:1px solid #21305499;padding:10px 0;font-size:.78rem;overflow:hidden}.scroll-ticker-inner{animation:18s linear infinite ticker-scroll;display:inline-block}@keyframes ticker-scroll{0%{transform:translate(0)}to{transform:translate(-33.333%)}}@media (width<=900px){.gui-navbar{align-items:flex-start}.gui-navbar nav{border-radius:18px;justify-content:flex-start;width:100%}}.lab-root{color:#e6edf3;background:#0b1020;grid-template-rows:64px 1fr 300px;min-height:100vh;display:grid;position:relative;overflow:hidden}.top-bar{background:#0f172a;border-bottom:1px solid #00ffc34d;justify-content:space-between;align-items:center;gap:1rem;padding:0 1rem;display:flex}.top-bar-brand{flex:none}.top-bar h1{color:#00ffc3;letter-spacing:.04em;margin:0;font-size:1rem}.top-bar-center{flex:auto;justify-content:center;min-width:0;display:flex}.top-bar button{color:#e6edf3;cursor:pointer;font:inherit;background:#7c3aed33;border:1px solid #7c3aedb3;border-radius:6px;padding:.45rem .8rem}.top-bar-link-button{color:#e6edf3;font:inherit;background:#7c3aed33;border:1px solid #7c3aedb3;border-radius:6px;justify-content:center;align-items:center;padding:.45rem .8rem;text-decoration:none;display:inline-flex}.top-bar-link-button--resume{color:#00ffc3;background:#00ffc31a;border-color:#00ffc373}.top-bar-actions{flex:none;align-items:center;gap:.5rem;display:flex}.terminal-topbar-typewriter{min-height:auto}.terminal-topbar-typewriter .typewriter-text{letter-spacing:.14em;color:#e6edf3f0;font-size:clamp(.95rem,1.6vw,1.2rem)}.terminal-topbar-typewriter .typewriter-cursor{font-size:clamp(1rem,1.7vw,1.25rem)}.help-toggle-button{cursor:pointer;font-size:.78rem;font:inherit;border-radius:6px;padding:.35rem .65rem;transition:background .2s,border-color .2s,color .2s}.help-toggle-on{color:#00ffc3;background:#00ffc31f;border:1px solid #00ffc3b3}.help-toggle-on:hover{background:#00ffc338}.help-toggle-off{color:#e6edf366;background:#e6edf30d;border:1px solid #e6edf333}.help-toggle-off:hover{color:#e6edf3b3;border-color:#e6edf366}.top-bar button:hover,.top-bar-link-button:hover{border-color:#00ffc3}.secondary-button{background:#0b1020bf;border:1px solid #00ffc359}.primary-dark-button{background:#060a14f5;border:1px solid #00ffc359}.primary-dark-button:hover{background:#080e1cfa;border-color:#00ffc3}.secondary-button:hover{border-color:#7c3aedcc}.main-layout{grid-template-columns:220px 1fr;min-height:0;display:grid;position:relative}.canvas-guide-popup{color:#e6edf3;z-index:5;pointer-events:none;background:#0b1020f0;border:1px solid #00ffc38c;border-radius:8px;padding:.55rem .8rem;font-size:.74rem;line-height:1.35;position:absolute;top:1rem;left:calc(220px + 1rem);box-shadow:0 0 18px #00ffc324}.content-viewer-panel{z-index:4;background:linear-gradient(#0f172af5,#0b1020f7);border:1px solid #00ffc359;border-radius:14px;flex-direction:column;width:min(420px,100% - 260px - 2rem);max-height:calc(100% - 2rem);display:flex;position:absolute;top:1rem;right:1rem;overflow:hidden;box-shadow:0 0 26px #00ffc314}.content-viewer-header{border-bottom:1px solid #7c3aed47;justify-content:space-between;align-items:flex-start;gap:1rem;padding:.85rem 1rem;display:flex}.content-viewer-eyebrow{color:#00ffc3;letter-spacing:.12em;text-transform:uppercase;margin:0 0 .25rem;font-size:.68rem}.content-viewer-header h3{color:#e6edf3;word-break:break-word;margin:0;font-size:.96rem;line-height:1.3}.content-viewer-close{color:#e6edf3c7;cursor:pointer;font:inherit;background:#e6edf30d;border:1px solid #e6edf32e;border-radius:999px;padding:.3rem .75rem}.content-viewer-close:hover{color:#00ffc3;border-color:#00ffc366}.content-viewer-body{padding:1rem;overflow:auto}.content-viewer-body pre{color:#e6edf3;white-space:pre-wrap;word-break:break-word;font:inherit;margin:0;line-height:1.6}.content-viewer-body pre a{color:#7be4ff;text-decoration:underline}.camera-panel{border-color:#60a5fa73;box-shadow:0 0 26px #60a5fa1f}.camera-panel-body{flex:1;min-height:0;overflow:auto}.camera-panel-subtitle{color:#e6edf39e;margin:.25rem 0 0;font-size:.74rem}.camera-login-shell{place-items:center;min-height:340px;padding:1rem;display:grid}.camera-login-card{background:linear-gradient(#070e1df5,#0a1424f5);border:1px solid #60a5fa38;border-radius:14px;width:100%;padding:1rem;box-shadow:inset 0 0 0 1px #ffffff08}.camera-login-kicker{color:#7be4ff;letter-spacing:.14em;text-transform:uppercase;margin:0 0 .35rem;font-size:.7rem}.camera-login-card h4{margin:0 0 1rem;font-size:1rem}.camera-field{gap:.35rem;margin-bottom:.8rem;display:grid}.camera-field span{color:#e6edf3b8;font-size:.75rem}.camera-field input{color:#e6edf3;font:inherit;background:#050a14d1;border:1px solid #7be4ff47;border-radius:8px;padding:.6rem .7rem}.camera-field input:focus{border-color:#7be4ff;outline:none}.camera-login-button{color:#dff7ff;width:100%;font:inherit;cursor:pointer;background:#7be4ff1f;border:1px solid #7be4ff6b;border-radius:10px;padding:.62rem .8rem}.camera-login-button:hover{background:#7be4ff2e}.camera-login-error{color:#ffb1b1;margin:.8rem 0 0;font-size:.75rem;line-height:1.45}.camera-dashboard{gap:.9rem;min-height:min-content;padding:1rem;display:grid}.camera-banner{color:#ffebc1eb;background:#fbbf2414;border:1px solid #fbbf2440;border-radius:999px;flex-wrap:wrap;align-items:center;gap:.6rem;padding:.45rem .7rem;font-size:.72rem;display:flex}.camera-banner-pill{color:#ff9c9c;letter-spacing:.1em;background:#ff4a4a2e;border-radius:999px;padding:.14rem .42rem;font-size:.66rem;font-weight:700}.camera-main-feed{background:#070b12f2;border:1px solid #7be4ff2e;border-radius:14px;overflow:hidden}.camera-feed-head{border-bottom:1px solid #7be4ff24;justify-content:space-between;align-items:center;gap:1rem;padding:.8rem .9rem;display:flex}.camera-feed-head strong,.camera-feed-head span{display:block}.camera-feed-head span{color:#e6edf38f;margin-top:.2rem;font-size:.72rem}.camera-feed-meta{text-align:right}.camera-feed-meta span:first-child{color:#ff8a8a;letter-spacing:.08em;font-weight:700}.camera-feed-stage{background:radial-gradient(circle at 18% 18%,#7be4ff1f,#0000 30%),linear-gradient(#0d1421f5,#06090ffa);min-height:220px;padding:1rem;position:relative}.camera-feed-scanlines,.camera-feed-grid{pointer-events:none;position:absolute;inset:0}.camera-feed-scanlines{opacity:.36;background:repeating-linear-gradient(#ffffff0d 0 2px,#0000 2px 6px)}.camera-feed-grid{opacity:.3;background-image:linear-gradient(90deg,#7be4ff14 1px,#0000 1px),linear-gradient(#7be4ff14 1px,#0000 1px);background-size:42px 42px}.camera-feed-stamp{color:#7be4ffc7;letter-spacing:.14em;font-size:.7rem;position:absolute;top:1rem;left:1rem}.camera-feed-status{text-align:right;color:#e6edf3e6;text-shadow:0 0 16px #7be4ff2e;max-width:58%;font-size:1rem;font-weight:600;position:absolute;bottom:1rem;right:1rem}.camera-feed-picker{grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem;display:grid}.camera-feed-tile{text-align:left;color:#e6edf3;cursor:pointer;font:inherit;background:#0a111ce6;border:1px solid #e6edf31f;border-radius:12px;gap:.18rem;padding:.8rem;display:grid}.camera-feed-tile.is-active{border-color:#7be4ff7a;box-shadow:0 0 0 1px #7be4ff29}.camera-feed-tile-label{color:#7be4ff;letter-spacing:.12em;font-size:.66rem}.camera-feed-tile small{color:#e6edf38f;font-size:.68rem}.device-panel{background:#0f172a;border-right:1px solid #7c3aed66;padding:1rem}.device-panel h2{color:#7c3aed;margin:0 0 .75rem;font-size:.95rem}.device-icon{cursor:grab;-webkit-user-select:none;user-select:none;background:#0f172acc;border:1px solid #00ffc366;border-radius:8px;align-items:center;gap:.5rem;padding:.65rem .75rem;display:flex}.device-list{gap:.65rem;display:grid}.device-symbol{color:#8dd6ff;letter-spacing:.08em;background:#7c3aed2e;border-radius:8px;flex:none;place-items:center;width:2rem;height:2rem;font-size:.74rem;font-weight:700;display:inline-grid}.device-copy{flex-direction:column;min-width:0;display:flex}.device-copy strong{color:#e6edf3;font-size:.8rem}.device-copy small{color:#e6edf39e;font-size:.68rem}.network-canvas{background-color:#0b1020;background-image:linear-gradient(90deg,#00ffc30d 1px,#0000 1px),linear-gradient(#00ffc30d 1px,#0000 1px);background-size:24px 24px;min-height:0}.lab-node{min-width:110px;box-shadow:none;background:#0f172a;border:1px solid #7c3aedcc;border-radius:8px;padding:.4rem .5rem;transition:border-color .2s,box-shadow .2s,transform .2s;position:relative}.pc-node--laptop{border-color:#60a5fae6}.pc-node--nas{border-color:#38bd95e6}.pc-node--camera{border-color:#fbbf24e6}.server-node{border-color:#00ffc3e6}.lab-node.is-connected{box-shadow:0 0 14px #7c3aed59}.server-node.is-connected{box-shadow:0 0 14px #00ffc359}.lab-node.is-active-session{border-color:#ff9100f2;transform:translateY(-1px);box-shadow:0 0 0 1px #ff910047,0 0 18px #ff910066}.server-node.is-active-session{border-color:#ff9100f2;box-shadow:0 0 0 1px #ff910047,0 0 22px #ff91006b}.node-session-badge{color:#ffb347;letter-spacing:.08em;white-space:nowrap;background:#ff910029;border:1px solid #ff9100e6;border-radius:999px;padding:.1rem .28rem;font-size:.34rem;font-weight:700;position:absolute;top:-12px;right:8px}.node-remove-button{color:#ff9b9b;cursor:pointer;z-index:4;background:#26090df0;border:1px solid #ff6060cc;border-radius:999px;width:1.15rem;height:1.15rem;font-size:.65rem;font-weight:700;line-height:1;position:absolute;top:-10px;left:-10px}.node-remove-button:hover{color:#ffd0d0;background:#5a1018fa}.node-guide-hint{color:#e6edf3;z-index:3;opacity:1;pointer-events:none;background:#0b1020f2;border:1px solid #00ffc38c;border-radius:6px;width:135px;padding:.3rem .36rem;font-size:.41rem;line-height:1.2;transition:opacity .35s,transform .35s;position:absolute;top:-52px;left:50%;transform:translate(-50%);box-shadow:0 0 18px #00ffc329}.node-guide-hint.is-leaving{opacity:0;transform:translate(-50%)translateY(-6px)}.node-guide-hint:after{content:"";border-top:5px solid #00ffc38c;border-left:5px solid #0000;border-right:5px solid #0000;width:0;height:0;position:absolute;bottom:-5px;left:50%;transform:translate(-50%)}.node-title{color:#e6edf3;font-size:.56rem;font-weight:600}.node-subtitle{color:#e6edf3cc;margin-top:.2rem;font-size:.49rem}.bottom-panel{border-top:1px solid #00ffc34d;grid-template-columns:1fr 1fr;min-height:0;display:grid}.panel{background:#0f172a;flex-direction:column;min-height:0;display:flex}.panel+.panel{border-left:1px solid #7c3aed66}.panel h3{color:#00ffc3;border-bottom:1px solid #7c3aed59;margin:0;padding:.6rem .8rem;font-size:.85rem}.panel-body{padding:.7rem .8rem;font-size:.82rem;line-height:1.5;overflow:auto}.terminal-output{flex:1}.terminal-panel{position:relative;overflow:hidden}.terminal-panel--glitch{animation:.18s steps(2,end) 6 terminal-glitch}.terminal-panel--glitch:after{content:"404";letter-spacing:.1em;color:#ff5c5c2e;pointer-events:none;text-shadow:-2px 0 #00ffc329,2px 0 #ff006e2e;font-size:2.8rem;font-weight:800;position:absolute;top:.8rem;right:1rem}.log-line{color:#e6edf3;white-space:pre-wrap}.muted{color:#e6edf38c;margin:0}.terminal-input-row{border-top:1px solid #7c3aed59;grid-template-columns:auto 1fr;align-items:center;gap:.45rem;padding:.6rem .8rem;display:grid}.terminal-suggestion-row{background:#0b10208c;border-top:1px solid #7c3aed33;flex-wrap:wrap;align-items:center;gap:.55rem;padding:.55rem .8rem;display:flex}.terminal-suggestion-label{color:#e6edf39e;font-size:.76rem}.terminal-suggestion-button{color:#00ffc3;font:inherit;cursor:pointer;background:#00ffc317;border:1px solid #00ffc373;border-radius:999px;padding:.28rem .7rem;font-size:.76rem}.terminal-suggestion-button:hover{background:#00ffc326;border-color:#00ffc3b3}.terminal-suggestion-link{text-decoration:none}.prompt{color:#00ffc3;font-size:.8rem}.terminal-input-row input{color:#e6edf3;width:100%;font:inherit;background:#0b1020cc;border:1px solid #00ffc359;border-radius:6px;padding:.4rem .5rem}.terminal-input-row input:focus{border-color:#00ffc3;outline:none}.react-flow__controls{background:#0f172a;border-color:#7c3aed99}.react-flow__controls-button{color:#e6edf3;background:#0f172a;border-bottom-color:#7c3aed99}.react-flow__handle{background:#00ffc3;border:1px solid #7c3aed}.lab-root--shadow{background:#16080d}.lab-root--shadow .top-bar{background:#1f0b10;border-bottom-color:#ff535359}.lab-root--shadow .top-bar h1,.lab-root--shadow .terminal-topbar-typewriter .typewriter-text{color:#ff8b8b}.lab-root--shadow .help-toggle-on,.lab-root--shadow .top-bar button{background:#ff404029;border-color:#ff6060bf}.lab-root--shadow .network-canvas{background-color:#14080d;background-image:linear-gradient(90deg,#ff464614 1px,#0000 1px),linear-gradient(#ff464614 1px,#0000 1px)}.lab-root--shadow .panel h3,.lab-root--shadow .prompt{color:#ff9c9c}.lab-root--shadow .terminal-suggestion-button{color:#ffc0c0;background:#ff505026;border-color:#ff7878a6}.lab-root--shadow .terminal-input-row input{background:#1d0a0ee6;border-color:#ff606073}.lab-root--shadow .canvas-guide-popup,.lab-root--shadow .content-viewer-panel{border-color:#ff64648c;box-shadow:0 0 18px #ff505033}.lab-root--breach{animation:.12s steps(2,end) 9 lab-breach-shake}.lab-root--breach:before{content:"";mix-blend-mode:screen;opacity:.95;pointer-events:none;z-index:8;background:repeating-linear-gradient(#ffffff0f 0 2px,#0000 2px 6px),linear-gradient(90deg,#ff006614,#00ffc314);position:absolute;inset:0}.lab-root--breach:after{content:"";pointer-events:none;z-index:8;position:absolute;inset:0;box-shadow:inset 0 0 120px #ff383859}.system-failure-overlay{pointer-events:none;z-index:9;text-align:center;background:#0e050829;align-content:center;place-items:center;gap:.75rem;display:grid;position:absolute;inset:0}.system-failure-code{color:#ffd6d633;letter-spacing:.18em;text-shadow:-6px 0 #00ffc338,6px 0 #ff006242;font-size:clamp(5rem,16vw,12rem);font-weight:900;line-height:.9}.system-failure-copy{color:#ffd6d6db;letter-spacing:.5em;font-size:clamp(.9rem,1.7vw,1.15rem)}@keyframes terminal-glitch{0%{filter:hue-rotate();transform:translate(0)}20%{filter:hue-rotate(24deg);transform:translate(-2px)}40%{filter:saturate(1.4);transform:translate(3px)}60%{filter:contrast(1.2);transform:translate(-1px)}to{filter:none;transform:translate(0)}}@keyframes lab-breach-shake{0%{filter:saturate();transform:translate(0,0)skew(0)}20%{filter:contrast(1.2);transform:translate(-8px,2px)skew(-1.5deg)}40%{filter:hue-rotate(18deg);transform:translate(10px,-3px)skew(1.5deg)}60%{filter:brightness(1.15);transform:translate(-6px,3px)skew(-1deg)}80%{filter:saturate(1.35);transform:translate(7px,-2px)skew(.8deg)}to{filter:none;transform:translate(0,0)skew(0)}}.lab-root--mobile{grid-template-rows:64px 1fr}.mobile-lab-notice{place-items:center;padding:1.5rem;display:grid}.mobile-lab-card{background:linear-gradient(#0f172af5,#0b1020f5);border:1px solid #00ffc34d;border-radius:16px;width:min(100%,560px);padding:1.5rem;box-shadow:0 0 24px #00ffc314}.mobile-lab-eyebrow{color:#00ffc3;letter-spacing:.12em;text-transform:uppercase;margin:0 0 .65rem;font-size:.78rem}.mobile-lab-card h2{margin:0 0 .9rem;font-size:clamp(1.4rem,5vw,2rem);line-height:1.2}.mobile-lab-card p{color:#e6edf3d1;margin:0 0 .85rem;line-height:1.6}.mobile-lab-actions{flex-wrap:wrap;gap:.75rem;margin-top:1.25rem;display:flex}.mobile-lab-actions button{flex:220px}@media (width<=980px){.lab-root{grid-template-rows:64px 1fr 360px}.main-layout{grid-template-columns:170px 1fr}.canvas-guide-popup{left:calc(170px + 1rem)}.content-viewer-panel{width:min(360px,100% - 190px - 2rem)}.bottom-panel{grid-template-columns:1fr}.panel+.panel{border-top:1px solid #7c3aed66;border-left:0}}@media (width<=640px){.top-bar{flex-wrap:wrap;gap:.75rem;padding:.75rem 1rem}.top-bar h1{font-size:.92rem}.top-bar-center{order:3;justify-content:flex-start;width:100%}.terminal-topbar-typewriter .typewriter-text{letter-spacing:.08em;font-size:.92rem}.top-bar button{width:100%}.mobile-lab-notice{padding:1rem}.mobile-lab-card{border-radius:14px;padding:1.2rem}.content-viewer-panel{width:auto;max-height:min(240px,100% - 1.5rem);position:absolute;inset:auto .75rem .75rem}}.react-flow{direction:ltr}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1;cursor:-webkit-grab;cursor:grab}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow .react-flow__edges{pointer-events:none;overflow:visible}.react-flow__edge-path,.react-flow__connection-path{stroke:#b1b1b7;stroke-width:1px;fill:none}.react-flow__edge{pointer-events:visibleStroke;cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path,.react-flow__edge:focus-visible .react-flow__edge-path{stroke:#555}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-textbg{fill:#fff}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__connectionline{z-index:1001}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:-webkit-grab;cursor:grab;position:absolute}.react-flow__node.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:-webkit-grab;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background:#1a192b;border:1px solid #fff;border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:-4px;left:50%;transform:translate(-50%)}.react-flow__handle-top{top:-4px;left:50%;transform:translate(-50%)}.react-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.react-flow__handle-right{top:50%;right:-4px;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{background:#ffffff80;margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-default,.react-flow__node-input,.react-flow__node-output,.react-flow__node-group{color:#222;text-align:center;background-color:#fff;border:1px solid #1a192b;border-radius:3px;width:150px;padding:10px;font-size:12px}.react-flow__node-default.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background-color:#f0f0f040}.react-flow__nodesselection-rect,.react-flow__selection{background:#0059dc14;border:1px dotted #0059dccc}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:0 0 2px 1px #00000014}.react-flow__controls-button{box-sizing:content-box;cursor:pointer;-webkit-user-select:none;user-select:none;background:#fefefe;border:none;border-bottom:1px solid #eee;justify-content:center;align-items:center;width:16px;height:16px;padding:5px;display:flex}.react-flow__controls-button:hover{background:#f4f4f4}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__minimap{background-color:#fff}.react-flow__minimap svg{display:block}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:#3367d9;border:1px solid #fff;border-radius:1px;width:4px;height:4px;transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border:0 solid #3367d9}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}
