.catalog{min-height:100vh;background:var(--bg);padding:40px 24px;max-width:1200px;margin:0 auto;position:relative;overflow-y:auto;overflow-x:hidden}.catalog-hero{text-align:center;padding:60px 0 48px}.catalog-hero__title{font-family:SystemMono,monospace;font-size:clamp(2rem,1.5rem + 2.5vw,3rem);letter-spacing:8px;color:var(--accent);text-shadow:0 0 30px var(--accent-glow),0 0 60px rgba(74,158,255,.08);font-weight:300;margin-bottom:12px}.catalog-hero__subtitle{font-size:.85rem;letter-spacing:4px;color:var(--text-dim);text-transform:uppercase;margin-bottom:24px}.catalog-hero__line{width:120px;height:1px;margin:0 auto;background:linear-gradient(90deg,transparent,var(--accent-dim),transparent)}.catalog-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;padding-bottom:40px}@media(max-width:768px){.catalog-grid{grid-template-columns:1fr}}.module-card{position:relative;background:#09142899;border:1px solid color-mix(in srgb,var(--module-accent, var(--accent)) 20%,transparent);border-radius:6px;padding:24px 24px 20px 32px;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);cursor:pointer;transition:border-color .2s ease,transform .2s ease,box-shadow .2s ease;overflow:hidden}.module-card:hover{border-color:color-mix(in srgb,var(--module-accent, var(--accent)) 50%,transparent);transform:translateY(-2px);box-shadow:0 8px 32px #0000004d,0 0 24px color-mix(in srgb,var(--module-accent, var(--accent)) 10%,transparent)}.module-card:focus-visible{outline:2px solid var(--module-accent, var(--accent));outline-offset:2px}.module-card--locked{opacity:.4;cursor:default}.module-card--locked:hover{transform:none;border-color:color-mix(in srgb,var(--module-accent, var(--accent)) 20%,transparent);box-shadow:none}.module-card--empty{cursor:default}.module-card--empty:hover{transform:none;box-shadow:none}.module-card__accent-bar{position:absolute;top:0;left:0;width:3px;height:100%;background:var(--module-accent, var(--accent));opacity:.6;transition:opacity .2s ease}.module-card:hover .module-card__accent-bar{opacity:1}.module-card--locked .module-card__accent-bar{opacity:.3}.module-card__header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:16px}.module-card__meta{display:flex;align-items:baseline;gap:12px}.module-card__number{font-size:1.75rem;font-weight:300;color:var(--text-dim);opacity:.5;line-height:1;font-family:SystemMono,monospace}.module-card__period{font-size:.6875rem;letter-spacing:1.5px;color:var(--module-accent, var(--accent));text-transform:uppercase;opacity:.8}.module-card__progress{flex-shrink:0}.module-card__lock-icon{color:var(--text-dim);opacity:.5}.module-card__body{margin-bottom:16px}.module-card__title{font-size:1.25rem;font-weight:600;color:var(--text);letter-spacing:.5px;margin-bottom:4px;line-height:1.3}.module-card__subtitle{font-size:.8125rem;color:var(--text-dim);letter-spacing:.5px;line-height:1.4}.module-card__footer{display:flex;justify-content:space-between;align-items:center;gap:12px}.module-card__figures{display:flex;flex-wrap:wrap;gap:4px 8px}.module-card__figure{font-size:.6875rem;color:var(--text-dim);opacity:.7;letter-spacing:.3px}.module-card__figure+.module-card__figure:before{content:""}.module-card__time{font-size:.6875rem;color:var(--text-dim);opacity:.6;white-space:nowrap;letter-spacing:.5px}.module-card__badge{position:absolute;top:12px;right:12px;font-size:.625rem;letter-spacing:1.5px;text-transform:uppercase;color:var(--text-dim);background:#4a9eff14;border:1px solid rgba(74,158,255,.15);border-radius:3px;padding:3px 8px}.module-card{opacity:0;transform:translateY(12px);animation:card-enter .4s ease-out forwards}.module-card:nth-child(1){animation-delay:.05s}.module-card:nth-child(2){animation-delay:.1s}.module-card:nth-child(3){animation-delay:.15s}.module-card:nth-child(4){animation-delay:.2s}.module-card:nth-child(5){animation-delay:.25s}.module-card:nth-child(6){animation-delay:.3s}.module-card:nth-child(7){animation-delay:.35s}.module-card:nth-child(8){animation-delay:.4s}@keyframes card-enter{to{opacity:1;transform:translateY(0)}}.module-card--locked{animation-name:card-enter-locked}@keyframes card-enter-locked{to{opacity:.4;transform:translateY(0)}}.catalog-footer{text-align:center;padding:24px 0 40px}.catalog-footer__text{font-size:.6875rem;letter-spacing:2px;color:var(--text-dim);opacity:.5;text-transform:uppercase}@media(prefers-reduced-motion:reduce){.module-card{opacity:1;transform:none;animation:none}.module-card--locked{opacity:.4;animation:none}}.mago-dialogue{position:fixed;bottom:20px;left:50%;transform:translate(-50%);width:min(72%,900px);z-index:20;background:#09142866;border:1px solid rgba(74,158,255,.15);border-radius:6px;padding:22px 28px 18px;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:0 0 40px #4a9eff0d,inset 0 0 30px #4a9eff08;opacity:0;transition:opacity .8s ease;overflow:hidden;pointer-events:auto}.mago-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent),0 0 20px var(--accent-glow);animation:dot-pulse 2s ease-in-out infinite;position:relative;flex-shrink:0}.mago-text em{font-style:normal;color:var(--accent);text-shadow:0 0 8px rgba(74,158,255,.4),0 0 20px rgba(74,158,255,.15);font-weight:600}.mago-prompt:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}.step-indicator{display:flex;gap:6px;align-items:center}.step-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--text-dim);opacity:.4;transition:background .3s ease,opacity .3s ease,box-shadow .3s ease}.step-dot--active{background:var(--accent);opacity:1;box-shadow:0 0 6px var(--accent),0 0 12px var(--accent-glow)}.lesson-header{display:flex;align-items:center;gap:8px;font-size:.6875rem;letter-spacing:2px;text-transform:uppercase}.lesson-header__module{color:var(--accent);font-weight:600}.lesson-header__separator{color:var(--text-dim);opacity:.5}.lesson-header__title{color:var(--text-dim)}.lab{position:fixed;inset:0;background:var(--bg);overflow:hidden}.lab-canvas{position:absolute;inset:0;z-index:0}.lab-canvas canvas{display:block;width:100%!important;height:100%!important}.lab-hud{position:absolute;inset:0;z-index:10;pointer-events:none}.lab-hud>*{pointer-events:auto}.lab-hud .scanlines-overlay,.lab-hud .hud-corner{pointer-events:none}.lab-hud-header{position:fixed;top:20px;left:60px;z-index:15;display:flex;flex-direction:column;gap:8px;pointer-events:none}.lab-back{position:fixed;top:16px;left:16px;z-index:20;padding:7px 14px;background:#09142899;border:1px solid var(--surface-border);border-radius:4px;color:var(--accent);font-family:inherit;font-size:.6875rem;letter-spacing:3px;text-transform:uppercase;cursor:pointer;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:background .2s ease,box-shadow .2s ease;pointer-events:auto}.lab-back:hover{background:#4a9eff1a;box-shadow:0 0 16px #4a9eff26}.lab-back:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.lab-tutor{position:fixed;top:16px;right:16px;z-index:20;padding:7px 14px;background:#09142899;border:1px solid var(--surface-border);border-radius:4px;color:var(--accent);font-family:inherit;font-size:.6875rem;letter-spacing:3px;text-transform:uppercase;cursor:pointer;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:background .2s ease,box-shadow .2s ease;pointer-events:auto}.lab-tutor:hover{background:#4a9eff1a;box-shadow:0 0 16px #4a9eff26}.lab-tutor:focus-visible{outline:2px solid var(--accent);outline-offset:2px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}@font-face{font-family:SystemMono;src:local("JetBrains Mono"),local("Fira Code"),local("Cascadia Code"),local("Consolas"),local("Courier New")}:root{--bg: #091428;--accent: #4a9eff;--accent-dim: rgba(74, 158, 255, .5);--accent-glow: rgba(74, 158, 255, .2);--blueprint-line: rgba(74, 158, 255, .06);--blueprint-line-major: rgba(74, 158, 255, .12);--text: #d0e4ff;--text-dim: #5a7a9a;--surface: rgba(9, 20, 40, .94);--surface-border: rgba(74, 158, 255, .25);--axis-x: #ff4466;--axis-y: #44ff88;--axis-z: #4488ff}html,body{width:100%;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:SystemMono,JetBrains Mono,Fira Code,Cascadia Code,monospace;-webkit-font-smoothing:antialiased;cursor:default;-webkit-user-select:none;user-select:none}body{opacity:0;animation:body-fade-in 1.5s ease .3s forwards}*:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.scanlines-overlay{position:fixed;inset:0;z-index:5;pointer-events:none;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(74,158,255,.015) 2px,rgba(74,158,255,.015) 4px),repeating-linear-gradient(90deg,transparent 0px,transparent 49px,var(--blueprint-line) 49px,var(--blueprint-line) 50px),repeating-linear-gradient(0deg,transparent 0px,transparent 49px,var(--blueprint-line) 49px,var(--blueprint-line) 50px)}.hud-corner{position:fixed;width:40px;height:40px;z-index:10;pointer-events:none}.hud-corner:before,.hud-corner:after{content:"";position:absolute;background:var(--accent);opacity:.6;box-shadow:0 0 10px #4a9eff1a}.hud-corner--tl{top:12px;left:12px}.hud-corner--tl:before{width:30px;height:1px;top:0;left:0}.hud-corner--tl:after{width:1px;height:30px;top:0;left:0}.hud-corner--tr{top:12px;right:12px}.hud-corner--tr:before{width:30px;height:1px;top:0;right:0}.hud-corner--tr:after{width:1px;height:30px;top:0;right:0}.hud-corner--bl{bottom:12px;left:12px}.hud-corner--bl:before{width:30px;height:1px;bottom:0;left:0}.hud-corner--bl:after{width:1px;height:30px;bottom:0;left:0}.hud-corner--br{bottom:12px;right:12px}.hud-corner--br:before{width:30px;height:1px;bottom:0;right:0}.hud-corner--br:after{width:1px;height:30px;bottom:0;right:0}.mago-dialogue{position:fixed;bottom:20px;left:50%;transform:translate(-50%);width:min(72%,900px);z-index:20;background:#09142866;border:1px solid rgba(74,158,255,.15);border-radius:6px;padding:22px 28px 18px;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:0 0 40px #4a9eff0d,inset 0 0 30px #4a9eff08;opacity:0;transition:opacity .8s ease;overflow:hidden}.mago-dialogue.visible{opacity:1}.mago-dialogue:before{content:"";position:absolute;left:0;top:-2px;width:100%;height:2px;background:#4a9eff14;animation:scanline-sweep 4s linear infinite;pointer-events:none;z-index:1}.dialogue-corner{position:absolute;width:14px;height:14px;pointer-events:none;z-index:2}.dialogue-corner:before,.dialogue-corner:after{content:"";position:absolute;background:#4a9eff66}.dialogue-corner--tl{top:6px;left:6px}.dialogue-corner--tl:before{width:14px;height:1px;top:0;left:0}.dialogue-corner--tl:after{width:1px;height:14px;top:0;left:0}.dialogue-corner--tr{top:6px;right:6px}.dialogue-corner--tr:before{width:14px;height:1px;top:0;right:0}.dialogue-corner--tr:after{width:1px;height:14px;top:0;right:0}.dialogue-corner--bl{bottom:6px;left:6px}.dialogue-corner--bl:before{width:14px;height:1px;bottom:0;left:0}.dialogue-corner--bl:after{width:1px;height:14px;bottom:0;left:0}.dialogue-corner--br{bottom:6px;right:6px}.dialogue-corner--br:before{width:14px;height:1px;bottom:0;right:0}.dialogue-corner--br:after{width:1px;height:14px;bottom:0;right:0}.mago-header{display:flex;align-items:center;gap:10px;margin-bottom:10px}.mago-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent),0 0 20px var(--accent-glow);animation:dot-pulse 2s ease-in-out infinite;position:relative}.mago-dot:before{content:"";position:absolute;inset:-4px;border-radius:50%;border:1px solid rgba(74,158,255,.3);animation:ring-pulse 2s ease-in-out infinite}.mago-dot:after{content:"";position:absolute;inset:-8px;border-radius:50%;border:1px solid rgba(74,158,255,.12);animation:ring-pulse 2s ease-in-out infinite .3s}.mago-label{font-size:.6875rem;letter-spacing:4px;text-transform:uppercase;color:var(--accent);font-weight:600}.mago-header-line{flex:0 0 100px;height:1px;background:linear-gradient(90deg,var(--accent),transparent);opacity:.3}.mago-text{font-size:1rem;line-height:1.65;color:#d0e4ffb3;min-height:1.65em;text-shadow:none}.mago-text em{font-style:normal;color:#4a9eff;text-shadow:0 0 8px rgba(74,158,255,.4),0 0 20px rgba(74,158,255,.15);font-weight:600}.mago-cursor{display:inline-block;width:2px;height:1.1em;background:var(--accent);margin-left:2px;vertical-align:text-bottom;animation:cursor-blink .8s step-end infinite}.mago-prompt{margin-top:14px;font-size:.75rem;color:var(--accent);letter-spacing:2px;text-transform:uppercase;text-shadow:0 0 10px rgba(74,158,255,.3);opacity:0;transition:opacity .5s ease;cursor:pointer}.mago-prompt.visible{opacity:1;animation:prompt-pulse 2s ease-in-out infinite}.glass-surface{background:#09142866;border:1px solid rgba(74,158,255,.15);border-radius:6px;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:0 0 40px #4a9eff0d,inset 0 0 30px #4a9eff08;overflow:hidden}.glass-surface:before{content:"";position:absolute;left:0;top:-2px;width:100%;height:2px;background:#4a9eff14;animation:scanline-sweep 4s linear infinite;pointer-events:none}.lab-placeholder,.catalog-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:16px;color:var(--text)}.lab-placeholder h1,.catalog-placeholder h1{font-size:1.5rem;letter-spacing:6px;text-transform:uppercase;color:var(--accent);text-shadow:0 0 30px var(--accent-glow)}.lab-placeholder p,.catalog-placeholder p{font-size:.875rem;color:var(--text-dim);letter-spacing:1px}.lab-placeholder button,.catalog-placeholder button{margin-top:8px;padding:10px 24px;background:transparent;border:1px solid var(--surface-border);border-radius:4px;color:var(--accent);font-family:inherit;font-size:.8125rem;letter-spacing:2px;text-transform:uppercase;cursor:pointer;transition:background .2s ease,box-shadow .2s ease}.lab-placeholder button:hover,.catalog-placeholder button:hover{background:#4a9eff14;box-shadow:0 0 20px #4a9eff1a}@keyframes body-fade-in{to{opacity:1}}@keyframes scanline-sweep{0%{top:-2px}to{top:100%}}@keyframes dot-pulse{0%,to{opacity:1;box-shadow:0 0 8px var(--accent),0 0 20px var(--accent-glow)}50%{opacity:.6;box-shadow:0 0 4px var(--accent)}}@keyframes ring-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.3;transform:scale(1.2)}}@keyframes cursor-blink{0%,to{opacity:1}50%{opacity:0}}@keyframes prompt-pulse{0%,to{opacity:.5;text-shadow:0 0 10px rgba(74,158,255,.2)}50%{opacity:1;text-shadow:0 0 15px rgba(74,158,255,.4)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
