/* Bases de Datos + MySQL · LokyApps · database-tool-inspired palette */
:root{
  --nav-bg:#17354A;--accent:#156B9A;--accent-soft:#E6F1F8;
  --bg:#F3F5F7;--card:#FFFFFF;--text:#243342;--muted:#526071;--line:#D5DDE5;
  --info:var(--accent);--warning:#92400E;--danger:#B42318;--success:#23764B;--code:#172633;
  /* Keep existing component aliases while separating accent and success roles. */
  --green:var(--accent);--green-dark:var(--nav-bg);--green-soft:var(--accent-soft);
  --blue:var(--accent);--blue-dark:var(--nav-bg);--blue-soft:var(--accent-soft);
  --shadow:0 2px 8px rgba(23,53,74,.05);--shadow-green:0 4px 12px rgba(23,53,74,.08);
  --radius:10px;--header:78px;--left:300px;--right:286px;
}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;line-height:1.5}
button,input,textarea,select{font:inherit}button{cursor:pointer}a{color:inherit;text-decoration:none}::selection{background:var(--accent-soft);color:var(--text)}
:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
.search-shell:focus-within{outline:3px solid var(--accent);outline-offset:2px}
.brand-image-fallback{display:grid;place-items:center;flex:none;width:46px;height:46px;padding:4px;border-radius:12px;background:var(--green);color:#fff;font-size:.58rem;font-weight:900;text-align:center}
.splash .brand-image-fallback{width:108px;height:108px;margin:0 auto 15px;border-radius:24px;font-size:1rem}
.footer .brand-image-fallback{height:46px;max-width:230px;padding:0 14px}
.hidden{display:none!important}

/* splash */
.splash{position:fixed;inset:0;z-index:9999;background:radial-gradient(circle at top,rgba(21,107,154,.12),transparent 30%),linear-gradient(145deg,#fff,var(--bg));display:grid;place-items:center;transition:opacity .55s,visibility .55s}
.splash.hide{opacity:0;visibility:hidden}.splash-card{text-align:center;animation:splashIn .85s cubic-bezier(.2,.8,.2,1)}
.splash-logo{width:108px;height:108px;object-fit:contain;filter:drop-shadow(0 18px 30px rgba(21,107,154,.28));animation:logoFloat 1.8s ease-in-out infinite alternate,logoPulse 1.8s ease-in-out infinite}
.splash h1{margin:15px 0 4px;font-size:clamp(1.8rem,4vw,3rem);letter-spacing:-.04em}.splash h1 span{color:var(--green)}.splash p{margin:0;color:var(--muted)}
.splash-line{height:5px;width:230px;background:var(--line);border-radius:999px;margin:20px auto 0;overflow:hidden}.splash-line i{display:block;width:0;height:100%;background:linear-gradient(90deg,var(--green),var(--blue));animation:loading 1.6s ease forwards}

/* header */
.header{height:var(--header);position:sticky;top:0;z-index:90;background:linear-gradient(90deg,var(--bg) 0%,rgba(255,255,255,.97) 48%,var(--accent-soft) 100%);backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}
.header:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:3px;background:linear-gradient(90deg,var(--green) 0 20%,var(--blue) 20% 62%,transparent 82%)}
.header-inner{height:100%;display:flex;align-items:center;gap:16px;padding:0 22px}.brand{display:flex;align-items:center;gap:10px;min-width:240px}.brand img{width:46px;height:46px;object-fit:contain}.brand b{display:block;font-size:.98rem;font-weight:900;letter-spacing:-.02em}.brand b span{color:var(--blue-dark)}.brand small{display:block;color:var(--green-dark);font-size:.72rem;font-weight:700}
.global-search{position:relative;flex:1;max-width:520px}.search-shell{display:flex;align-items:center;gap:8px;height:44px;border:1px solid var(--line);background:#F8FAFC;border-radius:14px;padding:0 12px}.search-shell:focus-within{background:#fff;border-color:var(--accent);box-shadow:0 0 0 4px rgba(21,107,154,.08)}.search-shell input{border:0;outline:0;background:transparent;width:100%;color:var(--text)}
.search-results{display:none;position:absolute;top:52px;left:0;right:0;background:white;border:1px solid var(--line);border-radius:16px;box-shadow:0 22px 52px rgba(15,23,42,.18);max-height:420px;overflow:auto;padding:7px;z-index:200}.search-results.show{display:block}.search-item{width:100%;border:0;background:white;border-radius:12px;padding:10px;text-align:left;display:flex;gap:10px}.search-item:hover{background:var(--green-soft)}.search-item em{font-style:normal;font-size:.68rem;font-weight:800;background:#eef2f7;color:#475569;border-radius:999px;padding:3px 7px;height:max-content}.search-item b{display:block;font-size:.84rem}.search-item small{display:block;color:var(--muted);font-size:.73rem;margin-top:2px}
.header-nav{margin-left:auto;display:flex;gap:4px}.header-nav button{border:0;background:transparent;padding:9px 11px;border-radius:11px;color:var(--muted);font-weight:750}.header-nav button:hover,.header-nav button.active{background:var(--green-soft);color:var(--green-dark)}
.mobile-menu{display:none;border:1px solid var(--line);background:white;border-radius:12px;width:42px;height:42px}

/* layout */
.app{display:grid;grid-template-columns:var(--left) minmax(0,1fr) var(--right);min-height:calc(100vh - var(--header))}.sidebar,.rightbar{position:sticky;top:var(--header);height:calc(100vh - var(--header));overflow:auto;background:#fff}.sidebar{border-right:1px solid var(--line);padding:18px 14px 36px}.rightbar{border-left:1px solid var(--line);padding:18px 15px 34px}.main{min-width:0;padding:24px 26px 80px}
.side-title{padding:0 9px 8px;font-size:.73rem;letter-spacing:.08em;text-transform:uppercase;color:#94A3B8;font-weight:900}.module-list{display:grid;gap:7px}.module-btn{border:1px solid transparent;background:#fff;border-radius:14px;padding:11px 12px;display:flex;align-items:center;gap:10px;text-align:left;transition:.2s}.module-btn:hover{background:var(--bg);border-color:var(--line)}.module-btn.active{background:var(--green-soft);border-color:var(--line)}.module-icon{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:var(--accent-soft);color:var(--green-dark);font-weight:900}.module-btn.active .module-icon{background:var(--green);color:#fff}.module-copy b{display:block;font-size:.85rem}.module-copy small{display:block;color:var(--muted);font-size:.68rem;margin-top:1px}.module-progress{margin-left:auto;font-size:.68rem;color:var(--muted);font-weight:800}
.lesson-nav{margin-top:16px}.level-heading{margin:14px 8px 6px;font-size:.68rem;font-weight:900;text-transform:uppercase;letter-spacing:.07em;color:#94A3B8}.lesson-btn{width:100%;border:0;background:transparent;display:flex;align-items:flex-start;gap:9px;text-align:left;border-radius:12px;padding:9px}.lesson-btn:hover{background:#f8fafc}.lesson-btn.active{background:var(--accent-soft)}.lesson-status{width:22px;height:22px;border-radius:8px;border:1px solid var(--line);display:grid;place-items:center;flex:0 0 auto;font-size:.7rem;color:#94a3b8;margin-top:1px}.lesson-btn.done .lesson-status{background:var(--green);border-color:var(--green);color:white}.lesson-label b{display:block;font-size:.78rem;line-height:1.25}.lesson-label small{color:var(--muted);font-size:.66rem}.project-dot{color:#F59E0B}

/* main views */
.view{display:none;animation:fadeUp .28s ease}.view.active{display:block}.hero{background:radial-gradient(circle at 90% 15%,rgba(21,107,154,.18),transparent 30%),linear-gradient(145deg,#fff,var(--bg));border:1px solid var(--line);border-radius:28px;padding:28px;box-shadow:var(--shadow);display:grid;grid-template-columns:1.15fr .85fr;gap:24px;align-items:center}.eyebrow{display:inline-flex;padding:6px 10px;border-radius:999px;background:var(--green-soft);color:var(--green-dark);font-weight:800;font-size:.76rem}.hero h1{font-size:clamp(2rem,3vw,3.3rem);letter-spacing:-.05em;line-height:1.02;margin:14px 0 12px}.hero h1 span{color:var(--green)}.hero p{color:var(--muted);max-width:68ch;margin:0 0 18px}.actions{display:flex;gap:10px;flex-wrap:wrap}.btn{border-radius:13px;padding:11px 16px;font-weight:800;border:1px solid var(--line);background:white;color:var(--text);transition:.2s}.btn:hover{transform:translateY(-2px);box-shadow:var(--shadow)}.btn.primary{background:var(--green);border-color:var(--green);color:white}.btn.ghost{background:transparent}.btn.danger{color:var(--danger)}.btn.small{padding:8px 11px;font-size:.78rem}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}
.hero-visual{min-height:270px;border-radius:24px;background:white;border:1px solid var(--line);padding:20px;display:grid;place-items:center}.path-map{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;width:100%}.path-chip{border:1px solid var(--line);background:var(--bg);border-radius:16px;padding:14px}.path-chip b{display:block;color:var(--green-dark)}.path-chip small{color:var(--muted)}.path-chip:last-child{grid-column:1/-1;background:var(--green-soft)}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:16px 0}.kpi{background:white;border:1px solid var(--line);border-radius:18px;padding:14px;box-shadow:var(--shadow)}.kpi b{font-size:1.3rem;color:var(--green-dark);display:block}.kpi span{font-size:.76rem;color:var(--muted)}
.section-card{margin-top:16px;background:#fff;border:1px solid var(--line);border-radius:22px;padding:20px;box-shadow:var(--shadow)}.section-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:14px}.section-head h2,.section-head h3{margin:0}.section-head p{margin:4px 0 0;color:var(--muted);font-size:.88rem}.module-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.module-card{border:1px solid var(--line);border-radius:18px;padding:16px;background:#fff;transition:.2s}.module-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-green);border-color:#cfe3c5}.module-card-top{display:flex;justify-content:space-between;gap:10px}.module-card h3{margin:8px 0 4px;font-size:1rem}.module-card p{margin:0;color:var(--muted);font-size:.8rem}.mini-progress{height:7px;background:var(--line);border-radius:999px;overflow:hidden;margin-top:12px}.mini-progress i{height:100%;display:block;background:var(--green);border-radius:999px}

/* lesson */
.breadcrumb{font-size:.75rem;color:var(--muted);margin-bottom:8px}.lesson-header{background:#fff;border:1px solid var(--line);border-radius:24px;padding:22px;box-shadow:var(--shadow)}.lesson-header-top{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.lesson-meta{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:8px}.tag{font-size:.7rem;font-weight:800;border-radius:999px;padding:5px 9px;background:#f1f5f9;color:#475569}.tag.green{background:var(--green-soft);color:var(--green-dark)}.tag.project{background:#FFF7E7;color:#A15B00}.lesson-header h1{margin:0 0 8px;font-size:clamp(1.55rem,2.5vw,2.4rem);letter-spacing:-.035em}.lesson-header p{margin:0;color:var(--muted)}.complete-badge{width:48px;height:48px;border-radius:15px;border:2px solid var(--line);display:grid;place-items:center;color:#94A3B8;font-weight:900}.complete-badge.done{background:var(--green);border-color:var(--green);color:#fff;animation:pop .35s ease}
.lesson-content{display:grid;gap:14px;margin-top:14px}.edu-card{background:#fff;border:1px solid var(--line);border-radius:20px;padding:18px;box-shadow:var(--shadow)}.edu-card h2{font-size:1rem;margin:0 0 10px}.edu-card p{margin:0;color:#334155}.topics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.topic{border:1px solid var(--line);background:#fbfcfd;border-radius:13px;padding:10px 11px;display:flex;gap:8px;font-size:.82rem}.topic i{width:8px;height:8px;border-radius:50%;background:var(--green);margin-top:6px;flex:none}
.info{border-left:4px solid var(--info);background:#F3F7FF}.tip{border-left:4px solid var(--green);background:#F5FBF2}.warn{border-left:4px solid var(--warning);background:#FFFBF1}
.code-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.code-head span{font-size:.74rem;color:var(--muted);font-weight:800}.code{margin:0;background:var(--code);color:#E2E8F0;border-radius:14px;padding:15px;overflow:auto;font:13px/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre}.editor{width:100%;min-height:180px;border:1px solid #233044;background:var(--code);color:#e7f7e0;border-radius:14px;padding:14px;font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical}.practice-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.preview{width:100%;min-height:220px;border:1px solid var(--line);border-radius:14px;background:white}.console{min-height:160px;border-radius:14px;background:#071019;color:#bfeab0;padding:13px;font:12px/1.5 ui-monospace,monospace;white-space:pre-wrap;overflow:auto}.feedback{display:none;margin-top:10px;padding:11px 12px;border-radius:12px;font-size:.82rem}.feedback.show{display:block}.feedback.ok{background:#ECF9EE;border:1px solid #BDE7C6;color:#166534}.feedback.bad{background:#FFF1F1;border:1px solid #F2C2C2;color:#A61B1B}
.quiz-options{display:grid;gap:8px;margin-top:10px}.quiz-option{border:1px solid var(--line);border-radius:13px;padding:10px 12px;display:flex;gap:8px;align-items:center}.quiz-option:has(input:checked){border-color:#9ad17f;background:var(--green-soft)}.lesson-footer-nav{display:flex;justify-content:space-between;gap:10px;margin-top:14px}
.glossary-chips{display:flex;flex-wrap:wrap;gap:7px}.glossary-chip{border:1px solid #dce7d7;background:#f8fcf6;border-radius:999px;padding:6px 9px;font-size:.72rem;color:var(--green-dark);font-weight:750}

/* visual diagrams */
.visual{overflow:hidden}.diagram{min-height:210px;border:1px solid var(--line);border-radius:18px;background:linear-gradient(160deg,#fbfdf9,#f3f7f1);padding:18px;display:grid;place-items:center}.flow{display:flex;align-items:center;justify-content:center;gap:9px;flex-wrap:wrap}.node{min-width:110px;background:#fff;border:1px solid #dbe5d6;border-radius:14px;padding:11px;text-align:center;box-shadow:0 7px 18px rgba(15,23,42,.05)}.node b{display:block;color:var(--green-dark);font-size:.82rem}.node small{color:var(--muted);font-size:.68rem}.arrow{color:var(--green);font-weight:900;font-size:1.2rem}.dom-tree{display:grid;gap:8px;text-align:center}.dom-row{display:flex;justify-content:center;gap:10px;flex-wrap:wrap}.boxmodel{width:min(360px,100%);background:#ffe9b9;padding:22px;border:1px dashed #e0a93d;text-align:center}.boxmodel .border{background:#cce7ff;padding:20px}.boxmodel .padding{background:#d9f2d1;padding:20px}.boxmodel .content{background:white;padding:20px;border:1px solid var(--line);font-weight:800}.semantic-grid{width:min(480px,100%);display:grid;grid-template-columns:1fr 130px;grid-template-areas:"head head" "nav nav" "main aside" "foot foot";gap:7px}.semantic-grid div{background:white;border:1px solid #cfe0c8;border-radius:10px;padding:12px;text-align:center;font-weight:800;color:var(--green-dark)}.semantic-grid .head{grid-area:head}.semantic-grid .nav{grid-area:nav}.semantic-grid .mainx{grid-area:main;min-height:90px}.semantic-grid .aside{grid-area:aside}.semantic-grid .foot{grid-area:foot}.axis{width:min(450px,100%);position:relative;background:white;border:1px solid var(--line);border-radius:15px;padding:20px}.axis-line{height:5px;background:var(--green);margin:55px 0 30px;position:relative}.axis-line:after{content:"main axis →";position:absolute;right:0;top:-24px;color:var(--green-dark);font-size:.75rem;font-weight:800}.axis-items{display:flex;gap:8px;position:absolute;left:30px;right:30px;top:48px}.axis-items i{height:44px;flex:1;border-radius:9px;background:var(--green-soft);border:1px solid #cfe3c5}.grid-demo{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;width:min(400px,100%)}.grid-demo i{height:68px;background:white;border:1px solid #cfe3c5;border-radius:10px;display:grid;place-items:center;font-style:normal;color:var(--green-dark);font-weight:900}

/* right */
.right-card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:14px;margin-bottom:12px}.right-card h3{margin:0 0 10px;font-size:.86rem}.progress-row{display:flex;justify-content:space-between;font-size:.76rem;color:var(--muted);margin-bottom:6px}.progressbar{height:9px;background:var(--line);border-radius:999px;overflow:hidden}.progressbar i{display:block;width:0;height:100%;background:var(--green);border-radius:999px;transition:width .3s}.note{width:100%;min-height:95px;border:1px solid var(--line);border-radius:12px;padding:10px;resize:vertical}.quick-link{width:100%;border:0;background:#f8fafc;border-radius:11px;padding:9px;text-align:left;margin-top:6px;color:#475569;font-weight:700;font-size:.76rem}.quick-link:hover{background:var(--green-soft);color:var(--green-dark)}

/* glossary/resources/project */
.page-title{margin:0;font-size:2rem;letter-spacing:-.04em}.page-sub{color:var(--muted);margin:5px 0 16px}.glossary-search{width:100%;border:1px solid var(--line);border-radius:14px;padding:12px}.glossary-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:14px}.term-card{background:white;border:1px solid var(--line);border-radius:16px;padding:14px}.term-card b{color:var(--green-dark)}.term-card p{margin:5px 0 0;color:var(--muted);font-size:.8rem}.resource-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.resource-card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:16px}.resource-card h3{margin:0 0 6px}.resource-card p{margin:0 0 12px;color:var(--muted);font-size:.82rem}.resource-card a{color:var(--green-dark);font-weight:800;font-size:.78rem}
.requirements{display:grid;gap:8px}.req{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:13px;padding:10px;background:#fff}.req i{width:22px;height:22px;border-radius:7px;background:var(--green-soft);color:var(--green-dark);display:grid;place-items:center;font-style:normal;font-weight:900;flex:none}
.project-editors{display:grid;grid-template-columns:1fr 1fr;gap:12px}.tabs{display:flex;gap:7px;margin-bottom:8px}.tab{border:1px solid var(--line);background:white;border-radius:999px;padding:7px 10px;font-size:.74rem;font-weight:800}.tab.active{background:var(--green);color:white;border-color:var(--green)}.tabpane{display:none}.tabpane.active{display:block}.project-frame{width:100%;height:500px;border:1px solid var(--line);border-radius:14px;background:#fff}

/* modal */
.modal-backdrop{position:fixed;inset:0;z-index:400;background:rgba(15,23,42,.44);backdrop-filter:blur(5px);display:none;align-items:center;justify-content:center;padding:18px}.modal-backdrop.show{display:flex}.modal{width:min(780px,100%);max-height:86vh;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:25px;box-shadow:0 32px 90px rgba(15,23,42,.25)}.modal-head{display:flex;justify-content:space-between;align-items:center;padding:20px;border-bottom:1px solid var(--line)}.modal-brand{display:flex;align-items:center;gap:10px}.modal-brand img{width:46px;height:46px;object-fit:contain}.modal-brand h2{margin:0;font-size:1.1rem}.modal-brand p{margin:2px 0 0;color:var(--muted);font-size:.76rem}.close{width:40px;height:40px;border:1px solid var(--line);background:#fff;border-radius:11px;font-size:1.2rem}.modal-body{padding:20px}.help-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.help-step{border:1px solid var(--line);border-radius:16px;padding:13px;background:#fbfcfd}.help-step i{display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:var(--green-soft);color:var(--green-dark);font-style:normal;font-weight:900}.help-step b{display:block;margin:8px 0 3px}.help-step p{margin:0;color:var(--muted);font-size:.8rem}
.toast{position:fixed;right:18px;bottom:18px;z-index:500;background:#0f172a;color:#fff;border-radius:14px;padding:11px 14px;box-shadow:0 18px 46px rgba(15,23,42,.28);transform:translateY(30px);opacity:0;pointer-events:none;transition:.25s}.toast.show{transform:translateY(0);opacity:1}

/* footer */
.footer{grid-column:1/-1;background:#fff;border-top:1px solid var(--line);padding:26px}.footer-inner{max-width:1250px;margin:auto;display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap}.footer img{height:46px;max-width:230px;object-fit:contain}.footer p{margin:0;color:var(--muted);font-size:.78rem}.footer b{color:var(--text)}

@keyframes splashIn{from{opacity:0;transform:translateY(18px) scale(.96)}to{opacity:1;transform:none}}@keyframes logoFloat{to{transform:translateY(-5px) scale(1.02)}}@keyframes logoPulse{0%,100%{opacity:1}50%{opacity:.88;filter:drop-shadow(0 20px 36px rgba(21,107,154,.34))}}@keyframes loading{to{width:100%}}@keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes pop{50%{transform:scale(1.12)}}
@media(max-width:1220px){:root{--right:0px}.rightbar{display:none}.app{grid-template-columns:var(--left) 1fr}.global-search{max-width:370px}}
@media(max-width:900px){:root{--left:0px}.app{grid-template-columns:1fr}.sidebar{position:fixed;left:0;top:var(--header);bottom:0;width:min(320px,90vw);height:auto;z-index:120;transform:translateX(-102%);transition:.25s;box-shadow:20px 0 50px rgba(15,23,42,.16)}.sidebar.open{transform:none}.mobile-menu{display:block}.header-nav{display:none}.brand{min-width:auto}.brand small{display:none}.global-search{max-width:none}.hero{grid-template-columns:1fr}.kpis{grid-template-columns:repeat(2,1fr)}.module-grid,.glossary-grid,.resource-grid,.project-editors{grid-template-columns:1fr}.practice-grid{grid-template-columns:1fr}.topics{grid-template-columns:1fr}}
@media(max-width:600px){.header-inner{padding:0 10px;gap:8px}.brand b{display:none}.brand img{width:42px;height:42px}.main{padding:16px 12px 70px}.hero{padding:20px;border-radius:22px}.hero h1{font-size:2rem}.kpis{grid-template-columns:1fr 1fr}.help-grid{grid-template-columns:1fr}.global-search input::placeholder{color:transparent}.semantic-grid{grid-template-columns:1fr;grid-template-areas:"head" "nav" "main" "aside" "foot"}.lesson-header-top{flex-direction:column}.lesson-footer-nav{flex-direction:column}.footer{padding:20px 14px}.footer-inner{align-items:flex-start}.footer img{height:38px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}

/* ===== Evaluaciones por nivel + Git/GitHub ampliado ===== */
.lesson-btn.locked{opacity:.52;cursor:not-allowed;filter:saturate(.5)}
.lesson-btn.locked:hover{background:transparent;transform:none}
.lesson-btn.assessment{margin-top:6px;border:1px dashed #cfe3c5;background:#fbfef9}
.lesson-btn.assessment:not(.locked):hover{background:var(--green-soft);border-color:#a9d493}
.lesson-btn.assessment.active{background:linear-gradient(135deg,#eaf7e4,#f8fcf6);border-color:#9ed083}
.lesson-btn.assessment .lesson-status{border-color:#b8dca8;background:#f2faee;color:var(--green-dark);font-weight:900}
.lesson-btn.assessment.done .lesson-status{background:var(--green);color:#fff}
.exam-dot{display:inline-flex;vertical-align:1px;padding:2px 5px;border-radius:6px;background:#eaf7e4;color:var(--green-dark);font-size:.53rem;letter-spacing:.04em;font-weight:950;margin-right:3px}
.tag.exam{background:#fff4df;color:#9a5b00}

.assessment-hero{background:radial-gradient(circle at 88% 18%,rgba(57,169,0,.16),transparent 28%),linear-gradient(145deg,#fff,var(--bg));border:1px solid var(--line);border-radius:25px;padding:23px;box-shadow:var(--shadow);display:flex;justify-content:space-between;gap:20px;align-items:flex-start}
.assessment-hero h1{margin:8px 0 8px;font-size:clamp(1.6rem,2.5vw,2.5rem);letter-spacing:-.035em}
.assessment-hero p{margin:0;color:var(--muted);max-width:70ch}
.assessment-score{width:118px;min-height:104px;border:1px solid #dbe6d6;background:#fff;border-radius:20px;display:grid;place-items:center;text-align:center;padding:12px;flex:0 0 auto;box-shadow:0 10px 24px rgba(15,23,42,.05)}
.assessment-score span{font-size:1.65rem;font-weight:950;color:#64748b;line-height:1}
.assessment-score small{font-size:.63rem;font-weight:850;color:var(--muted);letter-spacing:.04em}
.assessment-score.passed{background:var(--green);border-color:var(--green)}
.assessment-score.passed span,.assessment-score.passed small{color:#fff}
.assessment-note{color:var(--muted);font-size:.82rem;margin-top:0}
.assessment-editor{min-height:360px}

.criteria-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
.criterion{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:14px;padding:11px;background:#fbfcfd;transition:.2s}
.criterion>i{width:27px;height:27px;border-radius:8px;background:#eef2f7;display:grid;place-items:center;font-style:normal;font-size:.72rem;font-weight:900;color:#64748b;flex:0 0 auto}
.criterion b{display:block;font-size:.82rem}
.criterion small{display:block;color:var(--muted);font-size:.7rem;margin-top:3px}
.criterion.ok{border-color:#bce2af;background:#f1faed}
.criterion.ok>i{background:var(--green);color:#fff}
.criterion.pending{border-color:#f1d6a7;background:#fffbf3}
.criterion.pending>i{background:#fff0d0;color:#9a5b00}
.assessment-details{margin-top:10px}
.exam-feedback-list{display:grid;gap:7px}
.exam-feedback{display:flex;gap:9px;align-items:flex-start;border:1px solid var(--line);border-radius:12px;padding:9px 10px;background:#fff}
.exam-feedback>span{width:23px;height:23px;border-radius:7px;display:grid;place-items:center;font-weight:900;flex:0 0 auto}
.exam-feedback b{display:block;font-size:.78rem}
.exam-feedback small{display:block;color:var(--muted);font-size:.7rem;margin-top:2px}
.exam-feedback.ok{border-color:#c9e9bd;background:#f5fbf2}.exam-feedback.ok>span{background:var(--green);color:#fff}
.exam-feedback.pending{border-color:#f3d8aa;background:#fffbf2}.exam-feedback.pending>span{background:#fff0cf;color:#9a5b00}

.review-console{white-space:pre-wrap;min-height:220px;overflow:auto}
.git-lanes{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}.commit{min-width:88px;text-align:center;border:1px solid #d8e5d2;border-radius:13px;background:#fff;padding:10px}.commit b{display:block;color:var(--green-dark)}.commit small{color:var(--muted)}.commit.current{box-shadow:0 0 0 3px rgba(57,169,0,.12);border-color:#a9d493}
.branch-map{width:min(520px,100%);border:1px solid var(--line);background:#fff;border-radius:15px;padding:18px;font:700 14px/1.9 ui-monospace,SFMono-Regular,Menlo,monospace;color:#475569}.branch-map .main{color:var(--green-dark)}.branch-map .feature{color:#2563eb}.branch-map small{display:block;font:12px/1.4 Inter,system-ui,sans-serif;color:var(--muted);margin-top:10px}
.auth-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;width:min(520px,100%)}

.gate-closed{border-color:#efd69f;background:linear-gradient(145deg,#fff,#fffaf0)}
.gate-open{border-color:#cbe5bd;background:linear-gradient(145deg,#fff,#f8fcf6)}
.gate-list{display:flex;gap:7px;flex-wrap:wrap}.gate-list button{border:1px solid #ead8b7;background:#fff;border-radius:999px;padding:6px 9px;font-size:.7rem;color:#7a5206;font-weight:750}.gate-list button:hover{background:#fff4df}.gate-list span{font-size:.72rem;color:var(--muted);align-self:center}

@media(max-width:900px){.criteria-grid{grid-template-columns:1fr}.assessment-hero{flex-direction:column}.assessment-score{width:100%;min-height:76px;display:flex;justify-content:space-between;padding:13px 16px}.auth-grid{grid-template-columns:1fr}}

/* ===== Mejoras LokyAprende: laboratorio, mapas temáticos y accesibilidad ===== */
.editor-shell{border:1px solid var(--line);border-radius:15px;overflow:hidden;background:#0b1220}.editor-toolbar{display:flex;justify-content:space-between;align-items:center;padding:8px 11px;background:#172033;color:#dbeafe;font-size:.68rem;font-weight:800}.editor-toolbar span:last-child{color:#86efac}.editor{display:block;width:100%;min-height:270px;border:0;border-radius:0;background:#0b1220;color:#e5e7eb;font:500 .83rem/1.65 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;padding:14px;resize:vertical;outline:none;tab-size:4}.editor:focus{box-shadow:inset 0 0 0 2px rgba(56,189,248,.35)}.editor-help{font-size:.7rem;color:var(--muted);margin-top:7px}.editor-help kbd{padding:2px 5px;border:1px solid var(--line);border-radius:5px;background:#fff;font-size:.64rem}.feedback ul{margin:6px 0 0;padding-left:20px}.feedback.hint{border-color:#b9dff4;background:#f0f9ff;color:#075985}.feedback.hint span{display:block;margin-top:3px}.console-head,.trace-head{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:10px}.console-head span,.trace-head span{font-size:.68rem;color:#94a3b8}.pseint-console{min-height:260px}.io-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.io-grid section{background:#111827;border:1px solid #263247;border-radius:12px;padding:11px}.io-grid h4{margin:0 0 7px;color:#93c5fd;font-size:.7rem;text-transform:uppercase}.io-grid pre{margin:0;white-space:pre-wrap;color:#e2e8f0;font:500 .76rem/1.5 ui-monospace,monospace}.run-summary{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}.run-summary span{padding:5px 8px;border-radius:999px;background:#e0f2fe;color:#075985;font-size:.65rem;font-weight:800}.run-error{min-height:190px;border-color:#fecaca!important;background:#FEF2F2!important;color:#7f1d1d}.run-error p{margin:8px 0}.run-error small{color:#991b1b}.trace-console{min-height:240px;background:#fff;border:1px solid var(--line);border-radius:15px;padding:13px;overflow:auto}.trace-table{border:1px solid var(--line);border-radius:10px;overflow:hidden}.trace-row{display:grid;grid-template-columns:45px minmax(180px,1.5fr) minmax(150px,1fr) minmax(100px,1fr);gap:0;border-bottom:1px solid var(--line);font-size:.67rem}.trace-row:last-child{border-bottom:0}.trace-row span{padding:7px 8px;border-right:1px solid var(--line)}.trace-row span:last-child{border-right:0}.trace-title{background:#f1f5f9;font-weight:900;color:#475569}.trace-row code{font:600 .65rem ui-monospace,monospace}.visual-caption{text-align:center;color:var(--muted);font-size:.7rem;margin:13px 0 0}.problem-map,.flowchart,.assignment-map,.io-pipeline,.operator-board,.logic-gates,.comparison-map,.if-map,.decision-tree,.nested-tree,.boolean-map,.profile-compare,.pseint-window,.structure-stack,.counter-flow,.loop-track,.loop-cycle,.repeat-map,.infinite-map,.menu-map,.aggregation-map,.search-array,.minmax-map,.matrix-equation,.math-cards,.module-map,.function-map,.param-map,.debug-map,.test-cards,.complexity-chart,.recursion-stack,.binary-array,.divide-tree,.greedy-path,.invariant-map,.optimization-map,.project-map,.kanban,.test-matrix,.doc-map,.presentation-map,.assessment-road,.topic-map{width:min(760px,100%);margin:auto}.problem-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.problem-box,.decomp-root,.solution,.pseudo-map>div,.structure-stack>div,.main-module,.function-card,.inv-step,.inv-core,.optimization-map>div,.project-map>div,.assessment-road>div,.assessment-road>strong{background:#fff;border:1px solid #cfe0e9;border-radius:13px;padding:11px;text-align:center;font-weight:850}.problem-box.question{background:#e0f2fe;color:#075985}.problem-box.solution{background:#dcfce7;color:#166534}.problem-arrow{text-align:center;font-size:1.4rem;color:var(--blue-dark);font-weight:900;margin:5px}.flowchart{text-align:center}.flow-node{width:min(260px,100%);margin:auto;padding:10px;border:2px solid #cbd5e1;background:#fff;font-weight:850}.flow-node.start{border-radius:999px;background:#dcfce7;border-color:#86efac}.flow-node.process{border-radius:10px}.flow-node.io{border-radius:18px 6px 18px 6px;background:#e0f2fe}.flow-node.output{border-radius:6px 18px 6px 18px;background:var(--bg)}.flow-node.decision,.diamond{clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);background:#fef3c7;padding:24px 32px}.flow-line{color:var(--blue-dark);font-weight:900}.branches,.if-branches{display:flex;justify-content:center;gap:18px;flex-wrap:wrap;font-size:.72rem;font-weight:800}.branches span,.if-branches span{padding:8px 12px;border-radius:10px;background:#fff;border:1px solid var(--line)}.pseudo-map{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap}.pseudo-map b{color:var(--blue-dark)}.assignment-map,.io-pipeline,.function-map,.param-map,.debug-map,.optimization-map,.project-map,.assessment-road{display:flex;align-items:center;justify-content:center;gap:9px;flex-wrap:wrap}.variable-card,.value-card,.io-card{min-width:120px;padding:14px;border:1px solid var(--line);border-radius:15px;background:#fff;text-align:center}.variable-card strong{display:block;font-size:1.25rem;color:var(--blue-dark)}.variable-card.changed{border-color:#86efac;background:var(--bg)}.value-card{background:#e0f2fe;color:#075985}.io-card{display:grid;gap:3px}.io-card b{font-size:.8rem}.io-card small{color:var(--muted)}.operator-board,.logic-gates,.math-cards,.test-cards,.complexity-chart{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.operator-board>div,.gate,.math-cards>div,.test-cards>div,.complexity-chart>div{background:#fff;border:1px solid var(--line);border-radius:14px;padding:13px;text-align:center}.operator-board span,.gate span{display:block;color:var(--muted);font-size:.7rem;margin-top:4px}.gate b{font-size:1.1rem;color:var(--blue-dark)}.comparison-map{display:grid;grid-template-columns:1fr auto 1fr auto;align-items:center;gap:12px}.comparison-map>div{background:#fff;border:1px solid var(--line);border-radius:12px;padding:13px;text-align:center;font-weight:850}.compare-sign{color:var(--blue-dark);font-size:1.4rem;border:0!important;background:transparent!important}.result-badge{background:#dcfce7!important;color:#166534}.if-map,.decision-tree{text-align:center}.if-map .diamond{width:220px;margin:auto}.decision-tree{display:grid;grid-template-columns:1fr 1fr;gap:12px}.decision-tree .diamond{grid-column:1/-1;width:220px;margin:auto}.decision-path{padding:12px;border:1px solid var(--line);border-radius:13px;background:#fff}.decision-path.yes{border-color:#86efac;background:var(--bg)}.decision-path.no{border-color:#fcd34d;background:#fffbeb}.nested-tree{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px;font:700 .78rem/2 ui-monospace,monospace}.nested-tree .indent{padding-left:28px}.nested-tree .indent2{padding-left:56px;color:#166534}.boolean-map{display:flex;justify-content:center;align-items:center;gap:10px;flex-wrap:wrap}.boolean-map>div{background:#fff;border:1px solid var(--line);padding:12px;border-radius:12px}.boolean-map span{font-weight:900;color:var(--blue-dark)}.boolean-map strong{padding:11px;border-radius:12px;background:#dcfce7;color:#166534}.profile-compare{display:grid;grid-template-columns:1fr 1fr;gap:12px}.profile-compare>div{background:#fff;border:1px solid var(--line);border-radius:15px;padding:14px}.profile-compare small,.profile-compare code{display:block;color:var(--muted);margin-top:5px}.pseint-window{border:1px solid #94a3b8;border-radius:13px;background:#fff;overflow:hidden}.ui-toolbar{display:flex;gap:15px;background:#e2e8f0;padding:8px;font-size:.68rem;font-weight:800}.ui-main{display:grid;grid-template-columns:1.5fr 1fr;min-height:150px}.ui-code,.ui-output{padding:14px;font:600 .72rem/1.7 ui-monospace,monospace}.ui-output{border-left:1px solid var(--line);background:#f8fafc}.structure-stack{display:grid;grid-template-columns:1fr 1fr;gap:8px}.structure-stack>div:nth-child(1),.structure-stack>div:last-child{grid-column:1/-1;background:#e0f2fe}.counter-flow{display:flex;gap:18px;justify-content:center}.counter-box{padding:18px;border-radius:15px;background:#e0f2fe;color:#075985;text-align:center}.counter-box.accumulator{background:#dcfce7;color:#166534}.counter-box b{display:block;margin-top:6px}.loop-track{display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap}.loop-track div{width:45px;height:45px;border-radius:50%;display:grid;place-items:center;background:#fff;border:1px solid var(--line);font-weight:900}.loop-track .active{background:#dbeafe;border-color:#60a5fa}.loop-track span{width:100%;text-align:center;color:var(--muted);font-size:.7rem}.loop-cycle,.repeat-map,.infinite-map{display:grid;place-items:center;gap:9px;text-align:center}.loop-diamond{padding:28px;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);background:#fef3c7;font-weight:900}.loop-arrow{color:#166534;font-weight:800}.loop-exit{color:#64748b}.repeat-box{padding:13px 24px;background:#fff;border:1px solid var(--line);border-radius:13px;font-weight:850}.repeat-arrow{color:var(--blue-dark);font-weight:900}.infinite-map strong{color:#b91c1c;background:#fef2f2;padding:9px;border-radius:10px}.nested-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.nested-grid i{aspect-ratio:1;background:#fff;border:1px solid #bfdbfe;border-radius:8px;display:grid;place-items:center;font-style:normal;font-weight:800}.menu-map{display:grid;gap:7px;max-width:300px}.menu-map>*{background:#fff;border:1px solid var(--line);border-radius:10px;padding:9px}.menu-map b{background:#e0f2fe;color:#075985}.menu-map strong{background:#dcfce7;color:#166534;font-size:.7rem}.aggregation-map{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap}.aggregation-map span,.aggregation-map strong{background:#fff;border:1px solid var(--line);border-radius:10px;padding:11px}.aggregation-map strong{background:#dcfce7;color:#166534}.search-array,.binary-array{display:flex;justify-content:center;gap:6px;flex-wrap:wrap}.search-array i,.binary-array i{font-style:normal;width:52px;height:52px;display:grid;place-items:center;border:1px solid var(--line);border-radius:10px;background:#fff;font-weight:900}.search-array .hit,.binary-array .hit{background:#dcfce7;border-color:#86efac}.search-array span{width:100%;text-align:center;color:var(--muted);font-size:.7rem}.minmax-map{display:flex;align-items:flex-end;justify-content:center;gap:8px}.minmax-map>div{width:55px;height:calc(40px + var(--h,40px));display:grid;place-items:center;background:#e0f2fe;border-radius:9px;font-weight:900}.minmax-map .min{--h:10px;background:#dcfce7;color:#166534}.minmax-map .max{--h:90px;background:#dbeafe;color:#1d4ed8}.minmax-map small{font-size:.58rem}.sort-bars{height:150px;display:flex;align-items:flex-end;justify-content:center;gap:8px}.sort-bars i{width:44px;background:#dbeafe;border:1px solid #93c5fd;border-radius:7px 7px 0 0;display:grid;place-items:start center;padding-top:5px;font-style:normal;font-weight:900}.matrix-grid{display:grid;grid-template-columns:repeat(3,55px);gap:5px;justify-content:center}.matrix-grid.small{grid-template-columns:repeat(2,40px)}.matrix-grid i{height:55px;background:#fff;border:1px solid #bfdbfe;border-radius:8px;display:grid;place-items:center;font-style:normal;font-weight:900}.matrix-grid.small i{height:40px}.matrix-label{text-align:center;margin-top:8px;color:var(--muted);font-size:.7rem}.matrix-equation{display:flex;justify-content:center;align-items:center;gap:10px}.module-map{text-align:center}.module-links{display:flex;justify-content:center;gap:12px;flex-wrap:wrap;margin-top:15px}.module-links span{padding:9px 13px;border-radius:10px;background:#e0f2fe;color:#075985;font-weight:800}.function-map .function-card{background:#e0f2fe;color:#075985}.param-list{display:flex;gap:6px}.param-list b{padding:8px 11px;border-radius:9px;background:#fff;border:1px solid var(--line)}.debug-map>div,.optimization-map>div,.project-map>div,.assessment-road>div{padding:10px}.debug-map>span,.optimization-map>span,.project-map>span,.assessment-road>span{color:var(--blue-dark);font-weight:900}.test-cards{grid-template-columns:repeat(3,1fr)}.test-cards b{display:block;color:#16a34a;font-size:1.2rem}.complexity-chart>div:nth-child(1){background:#dcfce7}.complexity-chart>div:nth-child(2){background:#e0f2fe}.complexity-chart>div:nth-child(3){background:#fef3c7}.complexity-chart small{display:block;color:var(--muted)}.recursion-stack{max-width:360px}.recursion-stack>div{margin:4px 0;padding:8px 12px;border-left:4px solid #60a5fa;background:#fff;border-radius:0 9px 9px 0}.recursion-stack .base{border-color:#86efac;background:var(--bg)}.divide-tree{text-align:center}.divide-branches{display:flex;justify-content:center;gap:40px;margin:12px 0}.divide-branches span{padding:10px;background:#fff;border:1px solid var(--line);border-radius:10px}.divide-merge{padding:10px;background:#dcfce7;border-radius:10px}.greedy-path{display:flex;justify-content:center;align-items:center;gap:9px;flex-wrap:wrap}.greedy-path>div,.greedy-path>strong{padding:11px;background:#fff;border:1px solid var(--line);border-radius:11px}.greedy-path strong{background:#fef3c7}.invariant-map{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap}.invariant-map .inv-core{background:#e0f2fe;color:#075985}.kanban{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.kanban>div{display:grid;gap:6px;align-content:start;background:#f8fafc;border:1px solid var(--line);border-radius:13px;padding:10px;min-height:120px}.kanban span{background:#fff;border:1px solid var(--line);border-radius:8px;padding:7px;font-size:.7rem}.test-matrix{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.test-matrix>div{padding:10px;text-align:center;background:#fff;border:1px solid var(--line);border-radius:8px}.test-matrix .pass{background:#dcfce7;color:#166534;font-weight:900}.doc-map{display:grid;grid-template-columns:repeat(5,1fr);gap:7px}.doc-map div{background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px;text-align:center;font-size:.7rem;font-weight:800}.presentation-map{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}.slide{width:130px;aspect-ratio:16/10;background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px;font-weight:800}.slide.active{background:#e0f2fe;border-color:#7dd3fc}.achievement-card{background:linear-gradient(145deg,#fff,var(--bg))}.xp-pill{padding:7px 11px;border-radius:999px;background:#e0f2fe;color:#075985;font-weight:900;font-size:.72rem}.achievement-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}.achievement{border:1px dashed #cbd5e1;border-radius:13px;padding:12px;background:#fff;opacity:.62}.achievement.unlocked{opacity:1;border-color:#86efac;background:var(--bg)}.achievement b{display:block;font-size:.8rem}.achievement small{color:var(--muted);font-size:.68rem}.assessment-road strong{background:#dcfce7;color:#166534}.topic-map{display:grid;grid-template-columns:1fr auto 1fr auto 1fr auto 1fr;align-items:center;gap:8px}.topic-map>div,.topic-map>strong{padding:11px;background:#fff;border:1px solid var(--line);border-radius:11px;text-align:center}.topic-map>strong{background:#dcfce7;color:#166534}
@media(max-width:700px){.io-grid,.operator-board,.logic-gates,.math-cards,.profile-compare,.achievement-grid,.kanban,.doc-map{grid-template-columns:1fr}.problem-grid,.decision-tree{grid-template-columns:1fr}.decision-tree .diamond{grid-column:auto}.comparison-map{grid-template-columns:1fr}.compare-sign{transform:rotate(90deg)}.matrix-equation{flex-wrap:wrap}.topic-map{grid-template-columns:1fr;gap:5px}.topic-map>span{transform:rotate(90deg)}.trace-row{grid-template-columns:34px 1.4fr 1fr}.trace-row span:nth-child(4){display:none}.nested-grid{grid-template-columns:repeat(3,1fr)}}

/* ===== Fase 2 · Laboratorio PSeInt ===== */
.lab-card{border-top:4px solid var(--green)}
.lab-status{display:inline-flex;align-items:center;gap:6px;padding:7px 11px;border-radius:999px;background:#eff6ff;color:#1d4ed8;font-size:.7rem;font-weight:900;white-space:nowrap}
.lab-status.ok{background:#dcfce7;color:#166534}
.syntax-reminder{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 12px;margin:10px 0 14px;border:1px solid #bfdbfe;background:#eff6ff;border-radius:12px;font-size:.76rem;color:#334155}
.syntax-reminder code{background:#0f172a;color:#e2e8f0;padding:5px 8px;border-radius:7px;font-weight:800}
.actions.compact{gap:6px;margin:0}
.map-help{font-size:.68rem;color:var(--muted);font-weight:700}

.pseint-editor-shell{overflow:hidden;background:#0b1220;border:1px solid #243244;box-shadow:0 12px 30px rgba(15,23,42,.12)}
.pseint-editor-shell .editor-toolbar{background:#111827;color:#cbd5e1;border-bottom:1px solid #273548}
.code-editor{position:relative;min-height:330px;background:#0b1220;overflow:hidden}
.editor-highlight,.editor-overlay{margin:0!important;padding:16px 18px!important;width:100%;min-height:330px;max-height:620px;overflow:auto;font:600 .82rem/1.72 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;tab-size:4;white-space:pre;word-wrap:normal;box-sizing:border-box}
.editor-highlight{position:absolute;inset:0;pointer-events:none;background:#0b1220;color:#dbeafe;border:0;z-index:1}
.editor-overlay{position:relative;z-index:2;resize:vertical;background:transparent!important;color:transparent!important;caret-color:#fff!important;-webkit-text-fill-color:transparent;outline:none;border:0!important}
.editor-overlay::selection{background:rgba(96,165,250,.34);-webkit-text-fill-color:transparent}
.syn-keyword{color:#60a5fa;font-weight:850}.syn-type{color:#34d399}.syn-string{color:#fbbf24}.syn-comment{color:#64748b;font-style:italic}.syn-number{color:#c084fc}
.lint-bar{display:flex;align-items:center;gap:7px;min-height:34px;padding:7px 12px;border-top:1px solid #273548;background:#111827;color:#cbd5e1;font-size:.68rem}
.lint-bar span{font-size:.7rem}.lint-bar small{margin-left:auto;color:#94a3b8}.lint-bar.lint-ok span{color:#22c55e}.lint-bar.lint-error span{color:#f87171}.lint-bar.lint-error b{color:#fecaca}.lint-bar.lint-warn span{color:#fbbf24}
.input-panel{margin-top:10px;border:1px solid var(--line);border-radius:12px;background:#f8fafc;overflow:hidden}
.input-panel summary{cursor:pointer;padding:10px 12px;font-size:.74rem;font-weight:900;color:#0f3f77}.input-panel p{margin:0;padding:0 12px 8px;color:var(--muted);font-size:.68rem}.input-data{display:block;width:100%;min-height:80px;padding:10px 12px;border:0;border-top:1px solid var(--line);resize:vertical;background:#fff;font:650 .78rem/1.55 ui-monospace,monospace;color:#0f172a;box-sizing:border-box}
.lab-output{min-width:0}.idle-console{min-height:170px;display:grid;align-content:center;text-align:center;background:#0f172a;color:#cbd5e1}.idle-console b{color:#86efac;font-size:.9rem}.idle-console p{margin:7px auto 0;max-width:330px;color:#94a3b8}
.error-suggestion{margin-top:9px;padding:10px 12px;border-radius:10px;background:#fff7ed;color:#9a3412;font-weight:700;font-size:.74rem}

.interactive-trace{background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden}.trace-head{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line);background:#f8fafc}.trace-head b{display:block}.trace-head small{display:block;color:var(--muted);margin-top:2px}.trace-layout{display:grid;grid-template-columns:1.35fr .8fr;min-height:330px}.trace-source{margin:0;padding:10px 0;background:#0f172a;color:#cbd5e1;overflow:auto;font:600 .72rem/1.7 ui-monospace,monospace}.trace-source span{display:block;padding:1px 12px 1px 0;white-space:pre}.trace-source span i{display:inline-block;width:42px;text-align:right;margin-right:12px;color:#475569;font-style:normal;user-select:none}.trace-source span.active{background:#1e3a5f;color:#fff;border-left:3px solid var(--accent)}.trace-source span.active i{color:#93c5fd}.trace-state{padding:14px;background:#fff;border-left:1px solid var(--line)}.trace-state h4{margin:0 0 5px;font-size:.7rem;text-transform:uppercase;letter-spacing:.04em;color:#64748b}.trace-state pre{margin:0 0 14px;padding:9px;background:#f8fafc;border:1px solid var(--line);border-radius:9px;white-space:pre-wrap;font:600 .7rem/1.55 ui-monospace,monospace}.trace-range{width:calc(100% - 28px);margin:10px 14px 14px;accent-color:var(--accent)}

.test-runner{border:1px solid var(--line);border-radius:14px;background:#fff;overflow:hidden}.auto-tests{display:grid;gap:8px;padding:10px}.auto-tests article{display:grid;gap:5px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#f8fafc}.auto-tests article.pass{border-color:#86efac;background:var(--bg)}.auto-tests article.fail{border-color:#fecaca;background:#fef2f2}.auto-tests article>div{display:flex;justify-content:space-between;gap:10px;align-items:center}.auto-tests small{color:var(--muted)}.auto-tests code{display:block;padding:5px 7px;border-radius:7px;background:#fff;font-size:.68rem;white-space:pre-wrap}

.map-interactive-node{cursor:pointer;transition:transform .16s ease,box-shadow .16s ease,outline-color .16s ease}.map-interactive-node:hover,.map-interactive-node:focus-visible{transform:translateY(-2px);outline:2px solid #60a5fa;outline-offset:2px}.map-interactive-node.map-active{box-shadow:0 0 0 3px rgba(21,107,154,.20);outline:2px solid var(--accent);outline-offset:2px}

.project-roadmap{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.project-step{display:grid;grid-template-columns:42px 1fr;align-items:start;gap:10px;padding:11px;border:1px solid var(--line);border-radius:12px;background:#fff}.project-step i{width:34px;height:34px;display:grid;place-items:center;border-radius:10px;background:#e0f2fe;color:#075985;font-style:normal;font-weight:900}.project-step span{font-size:.75rem;line-height:1.45;color:#334155}.project-pseint-editor{min-height:460px}.pseint-console>pre{margin:0;padding:14px;white-space:pre-wrap;font:650 .76rem/1.6 ui-monospace,monospace}

@media(max-width:900px){.trace-layout{grid-template-columns:1fr}.trace-state{border-left:0;border-top:1px solid var(--line)}.project-roadmap{grid-template-columns:1fr}.code-editor,.editor-highlight,.editor-overlay{min-height:300px}}
@media(max-width:600px){.syntax-reminder{align-items:flex-start}.trace-head{align-items:flex-start;flex-direction:column}.auto-tests article>div{align-items:flex-start;flex-direction:column}.editor-highlight,.editor-overlay{font-size:.75rem;padding:13px!important}.project-step{grid-template-columns:36px 1fr}}

@media(prefers-reduced-motion:reduce){.map-interactive-node{transition:none}.map-interactive-node:hover,.map-interactive-node:focus-visible{transform:none}}


/* ===== Fase 4 · Claridad pedagógica + layout ===== */
.app{grid-template-rows:minmax(0,auto) auto;align-items:start}
.sidebar,.rightbar{grid-row:1;z-index:5}
.main{grid-row:1;position:relative;z-index:2}
.footer{grid-row:2;position:relative;z-index:20;clear:both}
.learning-objective{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:18px;align-items:center;background:linear-gradient(135deg,#fff,#f4fbf1);border-left:4px solid var(--green)}
.learning-objective h2{margin:4px 0 8px;font-size:1.08rem}.learning-objective ul{margin:0;padding-left:20px;color:#334155}.learning-objective li{margin:4px 0;font-size:.82rem}.eyebrow{font-size:.65rem;font-weight:950;text-transform:uppercase;letter-spacing:.08em;color:var(--green-dark)}
.objective-meta{display:grid;grid-template-columns:repeat(3,minmax(80px,1fr));gap:7px}.objective-meta span{padding:10px 12px;border:1px solid var(--line);border-radius:11px;background:#fff;text-align:center;font-size:.7rem;color:var(--muted)}.objective-meta b{display:block;color:#334155;font-size:.62rem;margin-bottom:3px}
.lab-action-guide{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.lab-action-guide span{padding:7px 9px;border-radius:9px;background:#f8fafc;border:1px solid var(--line);color:var(--muted);font-size:.67rem}.lab-action-guide b{color:#0f3f77}
@media(max-width:900px){.learning-objective{grid-template-columns:1fr}.objective-meta{grid-template-columns:repeat(3,1fr)}}
@media(max-width:600px){.objective-meta{grid-template-columns:1fr}.footer{z-index:30}}

/* ===== Complementos pedagógicos SENA · lógica, evaluación y mapas visuales ===== */
.support-card{overflow:hidden}.support-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}.support-item{margin:0;border:1px solid var(--line);border-radius:16px;overflow:hidden;background:#fff;box-shadow:0 8px 24px rgba(15,23,42,.05)}.support-item>a{display:block;background:#f8fafc}.support-item img{display:block;width:100%;height:220px;object-fit:contain;padding:10px;box-sizing:border-box}.support-item figcaption{display:grid;gap:5px;padding:12px 14px;border-top:1px solid var(--line)}.support-item figcaption b{font-size:.82rem}.support-item figcaption small{color:var(--muted);font-size:.68rem}.support-item figcaption a{font-size:.7rem;font-weight:850;color:#0f5f1a;text-decoration:none}.support-item figcaption a:hover{text-decoration:underline}

.assessment-method{background:linear-gradient(145deg,#fff,#FBF3F6)}.assessment-weight-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}.assessment-weight-grid>div{display:grid;gap:3px;text-align:center;padding:13px 10px;border:1px solid var(--line);border-radius:13px;background:#fff}.assessment-weight-grid b{font-size:1.15rem;color:var(--green-dark)}.assessment-weight-grid span{font-size:.68rem;color:var(--muted);font-weight:750}.assessment-test-inputs{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:0 12px 12px}.assessment-test-inputs label{display:grid;gap:6px;font-size:.72rem;color:#334155}.assessment-test-inputs .input-data{border:1px solid var(--line);border-radius:10px;min-height:115px}.assessment-case-preview{display:grid;gap:8px;margin:10px 0}.assessment-case-preview article{display:grid;gap:4px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:#f8fafc}.assessment-case-preview b{font-size:.76rem}.assessment-case-preview small{font-size:.68rem;color:var(--muted)}.assessment-case-preview code{font-size:.68rem;white-space:pre-wrap;background:#fff;border:1px solid #e5e7eb;border-radius:7px;padding:6px 8px}.manual-test-reminder{display:grid;gap:4px;margin-top:10px;padding:11px 13px;border:1px solid #bfdbfe;border-radius:12px;background:#eff6ff}.manual-test-reminder b{font-size:.78rem;color:#1e3a8a}.manual-test-reminder span{font-size:.7rem;color:#475569}.manual-test-reminder.warning{border-color:#f3d8aa;background:#fffbf2}.manual-test-reminder.warning b{color:#9a5b00}.assessment-breakdown{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0}.assessment-breakdown>div{display:grid;gap:3px;text-align:center;padding:11px;border:1px solid var(--line);border-radius:12px;background:#f8fafc}.assessment-breakdown b{font-size:1rem}.assessment-breakdown span{font-size:.65rem;color:var(--muted);font-weight:800}.assessment-breakdown .ok{border-color:#bce2af;background:#f1faed}.assessment-breakdown .ok b{color:#166534}.assessment-breakdown .partial{border-color:#f3d8aa;background:#fffbf2}.assessment-breakdown .partial b{color:#9a5b00}.assessment-breakdown .bad{border-color:#fecaca;background:#fef2f2}.assessment-breakdown .bad b{color:#b91c1c}.assessment-execution-error{display:grid;gap:4px;margin-top:10px;padding:11px 13px;border:1px solid #fecaca;border-radius:12px;background:#fef2f2}.assessment-execution-error b{font-size:.78rem;color:#b91c1c}.assessment-execution-error span{font:650 .7rem/1.5 ui-monospace,monospace;color:#7f1d1d}.assessment-execution-error small{font-size:.68rem;color:#475569}.assessment-test-results{display:grid;gap:8px;margin-top:12px}.assessment-test-results h4{margin:0 0 2px;font-size:.8rem}.assessment-test-results article{display:grid;gap:5px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:#fff}.assessment-test-results article.pass{border-color:#bce2af;background:#f5fbf2}.assessment-test-results article.fail{border-color:#fecaca;background:#fef2f2}.assessment-test-results article>div{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}.assessment-test-results article b{font-size:.74rem}.assessment-test-results article small{font-size:.66rem;color:var(--muted)}.assessment-test-results article code{display:block;white-space:pre-wrap;padding:5px 7px;border-radius:7px;background:rgba(255,255,255,.8);font-size:.66rem}

.trace-mini,.type-grid,.naming-map,.comment-map,.switch-map,.validation-map,.vector-strip,.string-map,.sorting-map,.reverse-map,.subprocess-map,.scope-map,.strategy-map,.sorting-choice,.rec-vs,.dev-process-map,.truth-table-mini,.error-type-grid{width:min(590px,100%);margin:auto}
.trace-mini{display:grid;gap:5px}.trace-mini>div{display:grid;grid-template-columns:repeat(4,1fr);gap:4px}.trace-mini b,.trace-mini span{padding:8px;text-align:center;border-radius:8px;background:#fff;border:1px solid var(--line);font-size:.72rem}.trace-mini>div:first-child b{background:#eef2f7}.trace-mini .active span{border-color:#9ed083;background:#f1faed}
.type-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.type-grid div{display:grid;gap:5px;padding:13px 9px;text-align:center;border:1px solid var(--line);border-radius:12px;background:#fff}.type-grid b{font-size:.72rem}.type-grid span{font:750 .76rem ui-monospace,monospace;color:#0f3f77}
.naming-map{display:grid;grid-template-columns:1fr auto 1fr;gap:8px;align-items:center}.naming-map>div{padding:11px;border-radius:11px;text-align:center;font:800 .74rem ui-monospace,monospace;border:1px solid}.naming-map .bad{border-color:#fecaca;background:#fef2f2;color:#b91c1c}.naming-map .good{border-color:#bce2af;background:#f1faed;color:#166534}.naming-map>span{text-align:center;color:var(--muted)}
.comment-map{display:grid;gap:8px;text-align:center}.comment-map code{display:block;padding:10px;border:1px solid var(--line);border-radius:10px;background:#0f172a;color:#dbeafe}.comment-map>span{color:var(--green-dark);font-weight:900}.comment-map small{color:var(--muted)}
.switch-map{display:grid;gap:10px}.switch-root{padding:11px;text-align:center;border-radius:11px;background:#eaf7e4;border:1px solid #bce2af;font-weight:900}.switch-options{display:grid;grid-template-columns:repeat(2,1fr);gap:7px}.switch-options span{padding:9px;border:1px solid var(--line);border-radius:9px;background:#fff;font-size:.7rem}
.validation-map{display:grid;grid-template-columns:auto auto auto 1fr;gap:8px;align-items:center}.validation-map>div:not(.diamond-mini){padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:#fff;font-weight:800;font-size:.72rem}.diamond-mini{width:84px;height:66px;display:grid;place-items:center;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);border:1px solid #93c5fd;background:#eff6ff;font-size:.68rem;font-weight:900;text-align:center;padding:0 16px;box-sizing:border-box}.validation-map .yes,.validation-map .no{display:block;padding:8px 10px;border-radius:9px;font-size:.7rem;font-weight:800}.validation-map .yes{background:#f1faed;color:#166534}.validation-map .no{background:#fff7ed;color:#9a3412;grid-column:4}
.vector-strip{display:flex;align-items:stretch;justify-content:center;gap:5px;flex-wrap:wrap}.vector-strip i{position:relative;min-width:54px;padding:18px 10px 10px;border:1px solid var(--line);border-radius:10px;background:#fff;font-style:normal;text-align:center;font-weight:900}.vector-strip i small{position:absolute;left:5px;top:4px;font-size:.55rem;color:var(--muted)}.vector-strip i.active{border-color:#93c5fd;background:#eff6ff}.vector-strip i.hit{border-color:#86efac;background:#FBF1F5}.vector-arrow{width:100%;text-align:center;color:var(--green-dark);font-size:.7rem;font-weight:850;margin-top:5px}
.string-map{display:grid;grid-template-columns:1fr 1fr;gap:8px}.string-map code{grid-row:1/4;display:grid;place-items:center;padding:18px;border-radius:12px;background:#0f172a;color:#fde68a;font-size:1rem}.string-map span{padding:9px;border:1px solid var(--line);border-radius:9px;background:#fff;font-size:.7rem}.string-map b{color:#0f3f77}
.sorting-map,.reverse-map,.subprocess-map{display:flex;align-items:center;justify-content:center;gap:9px;flex-wrap:wrap}.sorting-map>div,.reverse-map>div,.subprocess-map>div{padding:11px 13px;border:1px solid var(--line);border-radius:11px;background:#fff;text-align:center;font-size:.72rem}.sorting-map>span,.reverse-map>span,.subprocess-map>span{font-weight:900;color:var(--green-dark)}.sorting-map small,.reverse-map small{display:block;color:var(--muted);margin-top:3px}.reverse-map .filtered{border-color:#bce2af;background:#f1faed}.subprocess-map .sub-card{border-color:#93c5fd;background:#eff6ff;color:#1e3a8a;font-weight:850}
.scope-map{display:grid;grid-template-columns:1.1fr .9fr;gap:10px}.scope-map>div{display:grid;gap:6px;padding:15px;border:1px solid var(--line);border-radius:12px;background:#fff}.scope-map .global{border-color:#bce2af;background:#f7fcf5}.scope-map .local{border-color:#bfdbfe;background:#f8fbff}.scope-map b{font-size:.74rem}.scope-map span{display:inline-flex;width:max-content;padding:4px 7px;border-radius:7px;background:#fff;border:1px solid var(--line);font:750 .7rem ui-monospace,monospace}.scope-map small{font-size:.64rem;color:var(--muted)}
.strategy-map,.dev-process-map{display:flex;align-items:center;justify-content:center;gap:7px;flex-wrap:wrap}.strategy-map>div,.strategy-map>strong,.dev-process-map>div{padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:#fff;font-size:.7rem}.strategy-map>strong{border-color:#bce2af;background:#eaf7e4;color:#166534}.strategy-map>span,.dev-process-map>span{color:var(--green-dark);font-weight:900}.dev-process-map>div:nth-of-type(2),.dev-process-map>div:nth-of-type(3){border-color:#bfdbfe;background:#f8fbff}.dev-process-map>div:last-child{border-color:#bce2af;background:#f1faed}
.sorting-choice,.rec-vs,.error-type-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.sorting-choice>div,.rec-vs>div,.error-type-grid>div{display:grid;gap:5px;padding:13px;border:1px solid var(--line);border-radius:11px;background:#fff}.sorting-choice b,.rec-vs b,.error-type-grid b{font-size:.74rem}.sorting-choice span,.rec-vs span,.error-type-grid span{font-size:.67rem;color:var(--muted)}.rec-vs{grid-template-columns:repeat(2,1fr)}.error-type-grid>div:first-child{border-color:#fecaca;background:#fef2f2}.error-type-grid>div:nth-child(2){border-color:#f3d8aa;background:#fffbf2}.error-type-grid>div:last-child{border-color:#bfdbfe;background:#eff6ff}
.truth-table-mini{display:grid;gap:4px}.truth-table-mini>div{display:grid;grid-template-columns:repeat(4,1fr);gap:4px}.truth-table-mini b,.truth-table-mini span{padding:8px;text-align:center;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:.7rem}.truth-table-mini>div:first-child b{background:#eef2f7}.truth-table-mini .yes{background:#f1faed;color:#166534;font-weight:900}

@media(max-width:700px){.assessment-weight-grid,.assessment-breakdown,.error-type-grid,.sorting-choice{grid-template-columns:1fr}.assessment-test-inputs{grid-template-columns:1fr}.type-grid{grid-template-columns:repeat(2,1fr)}.validation-map{grid-template-columns:1fr;justify-items:stretch;text-align:center}.validation-map>span:not(.yes):not(.no){transform:rotate(90deg)}.validation-map .yes,.validation-map .no{grid-column:auto}.diamond-mini{margin:auto}.scope-map,.rec-vs{grid-template-columns:1fr}.support-item img{height:auto;max-height:420px}.assessment-test-results article>div{flex-direction:column}.naming-map{grid-template-columns:1fr}.naming-map>span{transform:rotate(90deg)}.switch-options{grid-template-columns:1fr}.string-map{grid-template-columns:1fr}.string-map code{grid-row:auto}.strategy-map,.dev-process-map{flex-direction:column}.strategy-map>span,.dev-process-map>span{transform:rotate(90deg)}}

/* Recursos: manual PDF unificado */
.resource-pdf-hero{background:linear-gradient(135deg,#fff 0%,#f7fbff 58%,#eef8ff 100%);border:1px solid #d7e8f5;border-radius:24px;padding:24px;box-shadow:0 18px 45px rgba(15,73,113,.08);max-width:920px}.resource-pdf-brand{display:flex;gap:18px;align-items:center}.resource-pdf-brand>img{width:86px;height:86px;object-fit:contain;flex:0 0 86px}.resource-pdf-eyebrow{display:inline-block;color:#087cac;font-size:.7rem;font-weight:900;letter-spacing:.11em;margin-bottom:4px}.resource-pdf-brand h2{margin:0;color:#113f74;font-size:1.55rem;letter-spacing:-.025em}.resource-pdf-brand p{margin:8px 0 0;color:var(--muted);max-width:760px;line-height:1.55}.resource-pdf-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:20px 0}.resource-pdf-stats span{background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px;text-align:center;color:var(--muted);font-size:.76rem}.resource-pdf-stats b{display:block;color:#113f74;font-size:1.25rem;margin-bottom:2px}.resource-pdf-actions{display:flex;gap:10px;flex-wrap:wrap}.resource-pdf-actions a{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:0 17px;border-radius:12px;border:1px solid #bfd8e8;color:#0d6d8e;font-weight:900;font-size:.8rem;background:#fff}.resource-pdf-actions a.primary{background:var(--green-dark);border-color:var(--green-dark);color:#fff}.resource-pdf-hero>small{display:block;margin-top:12px;color:var(--muted);font-size:.72rem}
@media(max-width:700px){.resource-pdf-brand{align-items:flex-start}.resource-pdf-brand>img{width:64px;height:64px;flex-basis:64px}.resource-pdf-brand h2{font-size:1.25rem}.resource-pdf-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.resource-pdf-actions a{width:100%}}

/* PDF resources viewer */
body.pdf-open{overflow:hidden}
.resource-card{position:relative;overflow:hidden;min-height:156px;display:flex;flex-direction:column;align-items:flex-start}
.resource-card .resource-type{position:absolute;right:12px;top:12px;display:inline-flex;align-items:center;justify-content:center;min-width:38px;height:24px;padding:0 8px;border-radius:999px;background:#e9f7fb;color:#0a7898;font-size:.62rem;font-weight:900;letter-spacing:.08em}
.resource-card .resource-type.web{background:#eef4ff;color:#315eae}
.resource-card h3{padding-right:52px}
.resource-card p{flex:1}
.resource-card .resource-open,.resource-card>a{appearance:none;border:0;background:transparent;padding:0;color:var(--green-dark);font:inherit;font-weight:800;font-size:.78rem;cursor:pointer;text-decoration:none}
.resource-card .resource-open:hover,.resource-card>a:hover{text-decoration:underline}
.pdf-modal-backdrop{z-index:460;padding:14px}
.pdf-modal{width:min(1180px,96vw);height:min(92vh,920px);max-height:92vh;display:flex;flex-direction:column;overflow:hidden;border-radius:22px}
.pdf-modal-head{padding:14px 18px;flex:0 0 auto}
.pdf-modal-head .modal-brand img{width:40px;height:40px}
.pdf-modal-body{flex:1;min-height:0;background:#eef2f5}
.pdf-modal-body iframe{display:block;width:100%;height:100%;min-height:62vh;border:0;background:#fff}
.pdf-modal-actions{display:flex;gap:9px;justify-content:flex-end;align-items:center;padding:11px 16px;border-top:1px solid var(--line);background:#fff;flex:0 0 auto}
.pdf-modal-actions a,.pdf-modal-actions button{display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:0 13px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--green-dark);font-size:.76rem;font-weight:850;text-decoration:none;cursor:pointer}
.pdf-modal-actions button{background:var(--green-dark);border-color:var(--green-dark);color:#fff}
@media(max-width:700px){.pdf-modal-backdrop{padding:0}.pdf-modal{width:100vw;height:100dvh;max-height:100dvh;border-radius:0}.pdf-modal-head{padding:10px 12px}.pdf-modal-head .modal-brand p{display:none}.pdf-modal-body iframe{min-height:0}.pdf-modal-actions{justify-content:stretch;flex-wrap:wrap}.pdf-modal-actions a,.pdf-modal-actions button{flex:1 1 auto}.resource-card{min-height:140px}}


/* ===== Visualizador de algoritmos v7 ===== */
.visual-quick{background:linear-gradient(135deg,#eaf3ff,#eefcff)!important;border-color:#b9d9ff!important;color:#164b9b!important;font-weight:800!important}
.visual-tag{background:linear-gradient(135deg,#1749a0,#2fb5e8)!important;color:#fff!important;border:0!important}
.visual-lab-promo{margin:18px 0;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:24px;border:1px solid #cfe4ff;border-radius:22px;background:radial-gradient(circle at 85% 0,#dff8ff 0,transparent 34%),linear-gradient(135deg,#f5f9ff,#fff);box-shadow:0 12px 34px rgba(22,73,160,.08)}
.visual-lab-promo h2{margin:5px 0 7px;color:#123f88;font-size:1.35rem}.visual-lab-promo p{margin:0;color:var(--muted);max-width:720px;line-height:1.55}
.visualizer-page{max-width:1320px;margin:0 auto}.visualizer-heading{display:flex;justify-content:space-between;align-items:flex-end;gap:18px;margin-bottom:18px}.visualizer-heading h1{margin:4px 0 6px;font-size:2rem;color:#123f88}.visualizer-heading p{margin:0;color:var(--muted);max-width:760px}
.visualizer-shell{display:grid;grid-template-columns:260px minmax(0,1fr);gap:18px;align-items:start}.visualizer-menu{display:grid;gap:8px;position:sticky;top:84px}.visualizer-menu button{text-align:left;border:1px solid #dce8f7;background:#fff;border-radius:14px;padding:12px 13px;cursor:pointer;transition:.18s;display:grid;gap:3px}.visualizer-menu button:hover{transform:translateX(3px);border-color:#9fc9ff}.visualizer-menu button.active{border-color:#2e7bd8;background:linear-gradient(135deg,#edf5ff,#f5fdff);box-shadow:0 8px 18px rgba(30,96,180,.1)}.visualizer-menu small{font-size:.63rem;text-transform:uppercase;letter-spacing:.7px;color:#2a74ca;font-weight:800}.visualizer-menu b{font-size:.85rem;color:#17324d}.visualizer-menu span{font-size:.7rem;color:#6b7d91;line-height:1.35}
.visualizer-work{min-width:0}.visual-config{display:flex;gap:9px;align-items:end;flex-wrap:wrap;margin-bottom:12px;padding:12px 14px;border:1px solid #dce8f7;border-radius:14px;background:#fff}.visual-config label{display:grid;gap:4px;font-size:.68rem;font-weight:800;color:#586e86;text-transform:uppercase}.visual-config input{min-width:260px;border:1px solid #ccdceb;border-radius:9px;padding:9px 10px;font:inherit;color:#19334d}.visual-config .target-field input{min-width:90px;width:100px}
.visual-demo-card{border:1px solid #d7e7f8;background:#fff;border-radius:20px;overflow:hidden;box-shadow:0 16px 36px rgba(24,69,122,.08)}.visual-demo-head{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:18px 20px;border-bottom:1px solid #e6eef8;background:linear-gradient(135deg,#f8fbff,#f1fbff)}.visual-demo-head small{color:#2c77c8;text-transform:uppercase;font-weight:800;font-size:.66rem;letter-spacing:.7px}.visual-demo-head h2{margin:3px 0 4px;color:#123f88}.visual-demo-head p{margin:0;color:#697d91;font-size:.8rem}.trace-controls{display:flex;align-items:center;gap:5px;flex-wrap:wrap}.trace-controls select{border:1px solid #ccdaea;border-radius:8px;background:#fff;padding:6px 7px;color:#385069;font-size:.72rem}
.visual-demo-grid{display:grid;grid-template-columns:1.15fr .85fr;min-height:430px}.visual-demo-grid>section{padding:20px;min-width:0}.visual-demo-grid>section+section{border-left:1px solid #e4edf7;background:#fbfdff}.visual-demo-grid h4,.visual-exec-grid h4{margin:0 0 12px;font-size:.72rem;text-transform:uppercase;letter-spacing:.7px;color:#627992}.demo-scene{min-height:260px;display:flex;align-items:center;justify-content:center;padding:18px;border-radius:16px;background:radial-gradient(circle at 50% 30%,#f8fcff,#eef6ff);border:1px dashed #c7ddf6}.demo-message{display:flex;justify-content:space-between;gap:10px;margin:12px 0;color:#526980;font-size:.78rem}.demo-message b{color:#164b9b}.demo-code{margin:0;padding:16px;border-radius:12px;background:#13273b;color:#dff3ff;line-height:1.65;min-height:230px;white-space:pre-wrap}.demo-step-code{margin-top:12px;padding:10px;border-radius:10px;border:1px solid #cfe2f7;background:#f2f8ff;display:grid;gap:5px}.demo-step-code small{font-size:.64rem;color:#6b7f93;text-transform:uppercase}.demo-step-code code{color:#124b91;font-weight:800;white-space:pre-wrap}.visualizer-note{margin-top:14px;padding:16px 18px;border-left:5px solid #31a9df;border-radius:12px;background:#f2fbff;color:#476177}.visualizer-note b{color:#124b91}.visualizer-note p{margin:4px 0 0}
.algo-array{display:flex;gap:9px;align-items:flex-end;justify-content:center;flex-wrap:wrap}.algo-array span{width:58px;height:72px;border:2px solid #c4d8ee;border-radius:12px;background:#fff;display:flex;flex-direction:column;justify-content:center;align-items:center;transition:.25s;box-shadow:0 5px 14px rgba(20,65,110,.06)}.algo-array span small{font-size:.62rem;color:#7a8c9d}.algo-array span b{font-size:1.3rem;color:#193b63}.algo-array span.active{border-color:#2f8fe0;background:#eaf6ff;transform:translateY(-9px);box-shadow:0 10px 20px rgba(47,143,224,.16)}.algo-array span.found{border-color:#28a56a;background:#eafaf2}.algo-array span.muted{opacity:.28;filter:grayscale(1)}.range-labels{display:flex;gap:8px;justify-content:center;margin-top:14px}.range-labels span{background:#fff;border:1px solid #d9e6f3;border-radius:99px;padding:5px 9px;font-size:.7rem;color:#4c6680}
.loop-visual{text-align:center}.loop-counter{font-size:1.2rem;color:#466079;margin-bottom:20px}.loop-counter b{font-size:2rem;color:#1d64b4}.loop-dots{display:flex;gap:10px}.loop-dots i{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;border:2px solid #cad9e8;background:#fff;font-style:normal;font-weight:800}.loop-dots i.done{background:#e9f8f1;border-color:#76caa0;color:#178451}.loop-dots i.active{background:#e9f4ff;border-color:#2584d8;color:#155ba2;transform:scale(1.13)}
.truth-switches{display:flex;gap:20px;justify-content:center}.truth-switches>div{display:grid;gap:7px;text-align:center}.truth-switches span{width:66px;height:36px;border-radius:99px;background:#e8edf3;color:#64768a;display:grid;place-items:center;font-weight:900}.truth-switches span.on{background:#dff7ea;color:#16814f}.truth-results{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-top:18px}.truth-results span{border:1px solid #d3e1f0;background:#fff;padding:8px 10px;border-radius:9px;color:#536a81}.truth-results b{color:#155fae}
.stack-visual{display:flex;flex-direction:column;gap:4px;align-items:center;min-width:170px}.stack-visual small{color:#6c8195;font-weight:800}.stack-visual span{width:140px;text-align:center;border:2px solid #8fc3eb;background:#fff;padding:10px;border-radius:8px;font-weight:900;color:#184f84}.stack-visual em{color:#8294a7}.demo-matrix{display:grid;grid-template-columns:repeat(3,62px);gap:7px}.demo-matrix span{height:62px;border:2px solid #cbddec;border-radius:9px;background:#fff;display:grid;place-items:center;position:relative;font-weight:900;color:#234b73}.demo-matrix span small{position:absolute;top:3px;left:5px;font-size:.55rem;color:#92a1b1}.demo-matrix span.active{border-color:#2a8cdc;background:#e8f5ff;transform:scale(1.08)}.call-stack{display:flex;flex-direction:column;gap:5px;align-items:center}.call-stack small{color:#6d8094}.call-stack span{width:190px;text-align:center;padding:8px;border-radius:8px;background:#fff;border:1px solid #bed7ee;color:#194e82}.call-stack b{margin-top:10px;color:#178557}

/* ejecución visual de cualquier pseudocódigo */
.visual-execution{border:1px solid #cfe0f1;border-radius:16px;overflow:hidden;background:#fff}.visual-exec-grid{display:grid;grid-template-columns:1fr .9fr .72fr;min-height:370px}.visual-exec-grid>section{padding:14px;min-width:0}.visual-exec-grid>section+section{border-left:1px solid #e2ebf4}.visual-code-panel{background:#f9fbfd}.visual-state-panel{background:#fbfdff}.trace-scene{min-height:220px;border:1px dashed #c7dceb;border-radius:14px;background:radial-gradient(circle at 50% 20%,#fbfdff,#edf6ff);padding:16px;display:flex;flex-direction:column;justify-content:center;gap:16px}.trace-action{display:flex;gap:12px;align-items:flex-start}.trace-action>i{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;background:#e7f2ff;color:#145da8;font-size:1.4rem;font-style:normal;font-weight:900;flex:0 0 auto}.trace-action b{display:block;color:#174b80;margin-bottom:4px}.trace-action code{display:block;padding:7px 9px;border-radius:8px;background:#fff;border:1px solid #d6e5f4;color:#173f67;white-space:pre-wrap}.trace-action p{margin:7px 0 0;color:#637990;font-size:.75rem;line-height:1.4}.trace-action.decision>i{border-radius:10px;transform:rotate(45deg)}.trace-action.decision>i::first-letter{transform:rotate(-45deg)}.trace-action.loop>i{background:#eef0ff;color:#525cc0}.trace-action.output>i{background:#e8f9f0;color:#188058}.trace-action.input>i{background:#fff3df;color:#9a6207}
.trace-vars-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin-bottom:14px}.trace-var{border:1px solid #d6e3f0;background:#fff;border-radius:9px;padding:8px;min-width:0}.trace-var small{display:block;color:#788da1;font-size:.62rem;overflow:hidden;text-overflow:ellipsis}.trace-var b{display:block;color:#183f66;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.trace-var.changed{border-color:#7fc7f4;background:#eaf7ff;animation:varPulse .4s ease}@keyframes varPulse{50%{transform:scale(1.05)}}.trace-output{min-height:90px;max-height:160px;overflow:auto;background:#13273b;color:#dff5ff!important;border-radius:9px;padding:10px!important}.trace-vector{display:grid;gap:8px}.trace-vector>b,.trace-matrix>b{color:#385f85}.trace-vector>div{display:flex;gap:5px;flex-wrap:wrap}.trace-vector span{min-width:44px;border:1px solid #a9cae8;background:#fff;border-radius:8px;padding:6px;text-align:center;font-weight:800;color:#214c76;position:relative}.trace-vector span small{display:block;color:#8999a9;font-size:.55rem}.trace-matrix>div{display:flex;gap:4px}.trace-matrix span{width:42px;text-align:center;border:1px solid #b7d2e9;background:#fff;border-radius:6px;padding:6px}.trace-timeline{display:flex;align-items:center;gap:8px;padding:9px 14px;background:#f7fafc;border-top:1px solid #e2eaf2}.trace-timeline span{font-size:.62rem;color:#708499}.trace-timeline input{flex:1}

@media(max-width:1050px){.visualizer-shell{grid-template-columns:1fr}.visualizer-menu{position:static;grid-template-columns:repeat(2,minmax(0,1fr))}.visual-demo-grid{grid-template-columns:1fr}.visual-demo-grid>section+section{border-left:0;border-top:1px solid #e4edf7}.visual-exec-grid{grid-template-columns:1fr 1fr}.visual-state-panel{grid-column:1/-1;border-left:0!important;border-top:1px solid #e2ebf4}.visual-lab-promo{align-items:flex-start}}
@media(max-width:700px){.visualizer-heading,.visual-demo-head,.visual-lab-promo{flex-direction:column;align-items:stretch}.visualizer-menu{grid-template-columns:1fr}.visual-config input{min-width:0;width:100%}.visual-config label{flex:1 1 100%}.visual-demo-grid,.visual-exec-grid{display:block}.visual-exec-grid>section+section{border-left:0;border-top:1px solid #e2ebf4}.algo-array span{width:46px;height:58px}.trace-vars-grid{grid-template-columns:1fr 1fr}}

/* ===== Bases de Datos + MySQL · identidad y componentes propios ===== */
:root{--db:#2563EB;--db-dark:#1D4ED8;--db-soft:#EFF6FF;--sql:#7C3AED;--sql-soft:#F5F3FF;--nosql:#EA580C;--nosql-soft:#FFF7ED}
.db-accent{color:var(--db)!important}.sql-accent{color:var(--sql)!important}.nosql-accent{color:var(--nosql)!important}
.brand b span{color:var(--db)}
.db-cylinder{width:180px;height:150px;position:relative;margin:auto}.db-cylinder .cap{position:absolute;left:20px;right:20px;height:44px;border-radius:50%;background:linear-gradient(135deg,#dbeafe,#bfdbfe);border:3px solid #60a5fa}.db-cylinder .cap.top{top:8px}.db-cylinder .body{position:absolute;left:20px;right:20px;top:29px;height:92px;background:linear-gradient(90deg,#eff6ff,#dbeafe,#eff6ff);border-left:3px solid #60a5fa;border-right:3px solid #60a5fa}.db-cylinder .cap.bottom{bottom:8px}.db-cylinder .label{position:absolute;inset:54px 30px auto;z-index:2;text-align:center;font-weight:950;color:#1d4ed8;font-size:1.05rem}.db-cylinder .label small{display:block;color:#64748b;font-size:.65rem;margin-top:4px}
.hero.database-hero{background:radial-gradient(circle at 88% 12%,rgba(37,99,235,.16),transparent 28%),radial-gradient(circle at 77% 90%,rgba(124,58,237,.10),transparent 24%),linear-gradient(145deg,#fff,#f7fbff)}
.path-chip.db{border-color:#bfdbfe;background:#eff6ff}.path-chip.sql{border-color:#ddd6fe;background:#f5f3ff}.path-chip.sec{border-color:#bbf7d0;background:#FBF1F5}.path-chip.nosql{border-color:#fed7aa;background:#fff7ed}
.lab-promo{margin:18px 0;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:24px;border:1px solid #bfdbfe;border-radius:22px;background:radial-gradient(circle at 88% 0,#e0f2fe 0,transparent 34%),linear-gradient(135deg,#f8fbff,#fff);box-shadow:0 12px 34px rgba(37,99,235,.08)}.lab-promo h2{margin:5px 0 7px;color:#1e40af}.lab-promo p{margin:0;color:var(--muted);max-width:760px}
.sql-lab-page,.modeler-page{max-width:1440px;margin:0 auto}.lab-heading,.modeler-heading{display:flex;justify-content:space-between;align-items:end;gap:16px;margin-bottom:16px}.lab-heading h1,.modeler-heading h1{margin:4px 0 5px;font-size:2rem;color:#1e3a8a}.lab-heading p,.modeler-heading p{margin:0;color:var(--muted)}
.lab-tabs{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:12px}.lab-tab{border:1px solid var(--line);background:#fff;padding:9px 13px;border-radius:12px;font-weight:850;color:#475569}.lab-tab.active{background:#1d4ed8;color:white;border-color:#1d4ed8}.lab-tab[data-mode="mongo"].active{background:#15803d;border-color:#15803d}.lab-tab[data-mode="redis"].active{background:#dc2626;border-color:#dc2626}
.sql-lab-shell{display:grid;grid-template-columns:260px minmax(0,1fr);gap:14px}.schema-panel{background:#fff;border:1px solid var(--line);border-radius:18px;padding:14px;position:sticky;top:96px;max-height:calc(100vh - 120px);overflow:auto}.schema-panel h3{margin:0 0 10px}.schema-table{border:1px solid var(--line);border-radius:11px;margin-bottom:9px;overflow:hidden}.schema-table summary{cursor:pointer;padding:9px 10px;background:#f8fafc;font-weight:850;color:#334155}.schema-columns{padding:7px 10px;display:grid;gap:4px}.schema-columns span{display:flex;justify-content:space-between;gap:10px;font-size:.69rem}.schema-columns code{color:#1d4ed8}.schema-columns em{font-style:normal;color:#64748b}
.lab-main{min-width:0;display:grid;gap:12px}.lab-card-db{background:#fff;border:1px solid var(--line);border-radius:18px;padding:16px;box-shadow:var(--shadow)}.lab-toolbar{display:flex;justify-content:space-between;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:10px}.lab-toolbar .actions{gap:7px}.sql-editor{width:100%;min-height:260px;border:1px solid #26344b;background:#0b1220;color:#e2e8f0;border-radius:14px;padding:15px;font:500 .86rem/1.65 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical;tab-size:2}.sql-editor:focus{outline:3px solid rgba(37,99,235,.18);border-color:#60a5fa}.sql-tips{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px}.sql-tip{border:1px solid #dbeafe;background:#eff6ff;color:#1d4ed8;border-radius:999px;padding:6px 9px;font-size:.68rem;font-weight:800;cursor:pointer}
.result-shell{overflow:auto;border:1px solid var(--line);border-radius:13px}.result-table{width:100%;border-collapse:collapse;font-size:.76rem;min-width:520px}.result-table th{position:sticky;top:0;background:#eff6ff;color:#1e3a8a;text-align:left;padding:9px;border-bottom:1px solid #bfdbfe}.result-table td{padding:8px 9px;border-bottom:1px solid #eef2f7}.result-table tr:last-child td{border-bottom:0}.result-empty{padding:18px;text-align:center;color:#64748b}.query-meta{display:flex;gap:7px;flex-wrap:wrap;margin:10px 0}.query-meta span{font-size:.66rem;padding:5px 8px;border-radius:999px;background:#f1f5f9;color:#475569;font-weight:800}.query-meta .ok{background:#dcfce7;color:#166534}.query-meta .warn{background:#fef3c7;color:#92400e}.query-meta .err{background:#fee2e2;color:#991b1b}
.lab-message{padding:10px 12px;border-radius:11px;font-size:.78rem;background:#eff6ff;color:#1e40af}.lab-message.ok{background:#dcfce7;color:#166534}.lab-message.err{background:#fee2e2;color:#991b1b}.lab-message.warn{background:#fef3c7;color:#92400e}
.challenge-panel{display:grid;grid-template-columns:1fr 1fr;gap:10px}.challenge-box{border:1px solid var(--line);border-radius:14px;padding:12px;background:#fff}.challenge-box h4{margin:0 0 6px}.challenge-box p{margin:0;color:#64748b;font-size:.76rem}.challenge-box code{display:block;margin-top:8px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:9px;padding:8px;white-space:pre-wrap;font-size:.7rem}
.modeler-shell{display:grid;grid-template-columns:340px minmax(0,1fr);gap:14px}.modeler-controls{background:#fff;border:1px solid var(--line);border-radius:18px;padding:16px;align-self:start;position:sticky;top:96px}.form-grid{display:grid;gap:10px}.form-grid label{display:grid;gap:5px;font-size:.72rem;font-weight:850;color:#475569}.form-grid input,.form-grid textarea,.form-grid select{border:1px solid var(--line);border-radius:11px;padding:10px;background:white}.form-grid textarea{min-height:140px;font:500 .75rem/1.5 ui-monospace,monospace}.model-canvas{background:linear-gradient(#fff,#fff) padding-box,repeating-linear-gradient(0deg,#e2e8f0 0 1px,transparent 1px 24px),repeating-linear-gradient(90deg,#e2e8f0 0 1px,transparent 1px 24px);border:1px solid var(--line);border-radius:18px;padding:18px;min-height:600px;overflow:auto}.model-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;align-items:start}.entity-card{background:#fff;border:2px solid #bfdbfe;border-radius:14px;box-shadow:0 10px 24px rgba(37,99,235,.08);overflow:hidden}.entity-head{background:linear-gradient(135deg,#eff6ff,#dbeafe);padding:10px 12px;font-weight:950;color:#1e3a8a;display:flex;justify-content:space-between;gap:10px}.entity-field{display:grid;grid-template-columns:28px 1fr auto;gap:6px;align-items:center;padding:7px 10px;border-top:1px solid #eef2f7;font-size:.7rem}.entity-field .key{color:#d97706;font-weight:900}.entity-field code{color:#334155}.entity-field small{color:#94a3b8}.relation-strip{margin-top:14px;border:1px solid var(--line);background:#fff;border-radius:14px;padding:12px}.relation-strip h4{margin:0 0 8px}.relation-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:.72rem;padding:6px 0}.relation-row b{color:#1e40af}.relation-row span{color:#64748b}.generated-sql{margin-top:14px;background:#0b1220;color:#dbeafe;border-radius:14px;padding:14px;white-space:pre-wrap;overflow:auto;font:500 .72rem/1.55 ui-monospace,monospace}
.lesson-visual-img{width:100%;max-height:420px;object-fit:contain;border:1px solid var(--line);border-radius:16px;background:#fff}.source-caption{font-size:.67rem;color:#64748b;margin-top:6px}.lesson-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.concept-box{border:1px solid var(--line);border-radius:16px;background:#fff;padding:16px}.concept-box.simple{border-left:5px solid #60a5fa}.concept-box.warning{border-left:5px solid #f59e0b}.concept-box.success{border-left:5px solid #22c55e}.concept-box h3{margin:0 0 7px}.concept-box p{margin:0;color:#475569}.topic-list{display:grid;grid-template-columns:repeat(2,1fr);gap:7px}.topic-list span{border:1px solid var(--line);background:#f8fafc;border-radius:10px;padding:8px;font-size:.74rem}.lesson-sql{background:#0b1220;color:#e5e7eb;border-radius:14px;padding:15px;overflow:auto;white-space:pre;font:500 .78rem/1.6 ui-monospace,monospace}.lesson-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.lesson-actions .btn.lab{background:#1d4ed8;color:white;border-color:#1d4ed8}.mini-check{margin-top:12px;padding:12px;border-radius:13px;background:#f8fafc;border:1px solid var(--line)}.mini-check strong{display:block;margin-bottom:6px}.mini-check button{margin-top:8px}
.engine-table{width:100%;border-collapse:collapse;font-size:.73rem}.engine-table th,.engine-table td{border-bottom:1px solid var(--line);padding:9px;vertical-align:top;text-align:left}.engine-table th{background:#f8fafc}.engine-chip{display:inline-block;border-radius:999px;padding:4px 7px;font-size:.64rem;font-weight:850;background:#eef2ff;color:#4338ca}
.support-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:12px}.support-card{border:1px solid var(--line);border-radius:15px;padding:10px;background:#fff}.support-card img{width:100%;height:240px;object-fit:contain;border-radius:10px;background:#f8fafc}.support-card b{display:block;margin-top:8px;font-size:.78rem}.support-card small{display:block;color:#64748b;font-size:.66rem;margin-top:3px}
.object-badges{display:flex;gap:6px;flex-wrap:wrap}.object-badges span{padding:6px 9px;border-radius:999px;background:#eef2ff;color:#4338ca;font-size:.68rem;font-weight:850}
.history-list{display:grid;gap:6px}.history-item{border:1px solid var(--line);background:#fff;border-radius:10px;padding:8px;font-size:.68rem;cursor:pointer}.history-item code{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#1e40af}
.nosql-output{background:#0b1220;color:#d1fae5;border-radius:14px;padding:14px;min-height:180px;white-space:pre-wrap;font:500 .76rem/1.55 ui-monospace,monospace}
.architecture-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;align-items:center}.architecture-flow div{border:1px solid var(--line);border-radius:12px;padding:11px;text-align:center;background:#fff;font-size:.72rem;font-weight:850}.architecture-flow span{text-align:center;color:#2563eb;font-weight:950}
@media(max-width:1200px){.sql-lab-shell,.modeler-shell{grid-template-columns:1fr}.schema-panel,.modeler-controls{position:static;max-height:none}.model-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}}
@media(max-width:760px){.lab-heading,.modeler-heading,.lab-promo{flex-direction:column;align-items:stretch}.challenge-panel,.lesson-grid,.support-gallery,.model-grid{grid-template-columns:1fr}.architecture-flow{grid-template-columns:1fr}.architecture-flow span{transform:rotate(90deg)}.topic-list{grid-template-columns:1fr}}

.glossary-item{background:#fff;border:1px solid var(--line);border-radius:16px;padding:14px}.glossary-item b{color:var(--green-dark)}.glossary-item p{margin:5px 0 0;color:var(--muted);font-size:.8rem}

/* v1.2 · selector de base de práctica */
.dataset-switch{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 14px;padding:12px 14px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:16px}.dataset-switch label{display:flex;align-items:center;gap:10px;font-weight:850;color:#1e3a8a}.dataset-switch select{min-width:230px;border:1px solid #93c5fd;border-radius:10px;background:#fff;padding:9px 12px;color:#0f172a;font:inherit;font-weight:750}.dataset-switch small{color:#475569}@media(max-width:760px){.dataset-switch,.dataset-switch label{align-items:stretch;flex-direction:column}.dataset-switch select{width:100%;min-width:0}}


/* v1.4 · estructura pedagógica Comprender → Paso a paso → Practicar → Repasar → Material */
.learning-rail{position:sticky;top:76px;z-index:8;display:grid;grid-template-columns:repeat(5,1fr);gap:7px;margin:14px 0;padding:8px;background:rgba(255,255,255,.94);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:17px;box-shadow:var(--shadow)}
.learning-rail a{text-decoration:none;color:#334155;text-align:center;font-weight:850;font-size:.78rem;padding:9px 7px;border-radius:11px}.learning-rail a:hover{background:var(--green-soft);color:var(--green-dark)}
.learning-block{scroll-margin-top:142px;margin-top:16px;background:#fff;border:1px solid var(--line);border-radius:22px;padding:20px;box-shadow:var(--shadow)}
.learning-block.comprender{border-top:5px solid #2563eb}.learning-block.paso{border-top:5px solid #f59e0b}.learning-block.practicar{border-top:5px solid #16a34a}.learning-block.repasar{border-top:5px solid #7c3aed}.learning-block.material{border-top:5px solid #0ea5e9}
.learning-title{display:flex;gap:12px;align-items:flex-start;margin-bottom:15px}.learning-title>span{font-size:1.7rem}.learning-title h2{margin:0;font-size:1.18rem}.learning-title p{margin:3px 0 0;color:var(--muted);font-size:.82rem}
.learning-block .lesson-grid{margin:0 0 12px}.learning-block .support-gallery{margin-top:16px}.cine-bridge{margin:14px 0 4px;padding:13px 15px;border-radius:15px;border:1px solid #bfdbfe;background:linear-gradient(135deg,#eff6ff,#f8fbff)}.cine-bridge b{color:#1d4ed8}.cine-bridge p{margin:5px 0 0;color:#475569;font-size:.86rem}
.steps-list{margin:0;padding:0;counter-reset:step;display:grid;gap:10px;list-style:none}.steps-list li{position:relative;padding:12px 12px 12px 48px;border:1px solid var(--line);border-radius:14px;background:#fbfcfd;color:#334155}.steps-list li:before{counter-increment:step;content:counter(step);position:absolute;left:12px;top:10px;width:26px;height:26px;border-radius:9px;background:#fef3c7;color:#92400e;display:grid;place-items:center;font-weight:900}
.practice-editor,.reflection-editor{width:100%;min-height:170px;margin-top:12px;border:1px solid #cbd5e1;border-radius:14px;padding:14px;background:#0b1220;color:#e5e7eb;font:500 .8rem/1.55 ui-monospace,monospace;resize:vertical}.reflection-editor{background:#fff;color:#334155;font-family:inherit}.practice-feedback{margin-top:12px;border-radius:13px;padding:12px;display:none}.practice-feedback:not(:empty){display:block}.practice-feedback.ok{background:#ecfdf5;border:1px solid #86efac;color:#166534}.practice-feedback.warn,.practice-feedback.hint{background:#fffbeb;border:1px solid #fde68a;color:#92400e}.practice-feedback.err{background:#fef2f2;border:1px solid #fecaca;color:#991b1b}.practice-feedback.solution{background:#eff6ff;border:1px solid #bfdbfe;color:#1e3a8a}.practice-result{margin-top:12px;color:#475569}.practice-table-wrap{overflow:auto;border:1px solid var(--line);border-radius:12px}.lesson-sql.compact{margin-top:10px;max-height:220px}
.review-question{padding:14px 0;border-bottom:1px solid #edf2f7}.review-question:last-of-type{border-bottom:0}.review-question>strong{display:block;margin-bottom:8px}.review-feedback{font-size:.78rem;margin-top:6px}.review-feedback.ok{color:#15803d}.review-feedback.warn{color:#b45309}.review-feedback.err{color:#b91c1c}.review-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:15px}.review-actions b{color:#475569}
.material-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.material-link{display:flex;align-items:center;min-height:48px;border:1px solid var(--line);border-radius:13px;padding:10px 12px;background:#f8fafc;color:#0f172a;text-decoration:none;font:inherit;font-weight:750;text-align:left}.material-link:hover{border-color:#93c5fd;background:#eff6ff}
@media(max-width:760px){.learning-rail{top:66px;display:flex;overflow:auto;justify-content:flex-start}.learning-rail a{white-space:nowrap;min-width:max-content}.material-grid{grid-template-columns:1fr}.learning-block{scroll-margin-top:125px}.support-card img{height:auto;max-height:320px}}


/* v1.9 · bloques de lección separados y conceptos resaltados */
.lesson-tabs{position:sticky;top:76px;z-index:12;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:14px 0;padding:8px;background:rgba(255,255,255,.96);backdrop-filter:blur(12px);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow)}
.lesson-tab{border:1px solid transparent;background:transparent;color:var(--muted);border-radius:12px;padding:11px 8px;font-weight:900;display:flex;justify-content:center;align-items:center;gap:6px;transition:.2s}.lesson-tab:hover{background:var(--green-soft);color:var(--green-dark)}.lesson-tab.active{background:var(--green);color:#fff;border-color:var(--green);box-shadow:0 8px 20px rgba(21,107,154,.16)}
.lesson-panels{min-height:420px}.lesson-panel{margin-top:16px;background:#fff;border:1px solid var(--line);border-radius:22px;padding:22px;box-shadow:var(--shadow);animation:fadeUp .24s ease}.lesson-panel[hidden]{display:none!important}.lesson-panel.comprender{border-top:5px solid var(--green)}.lesson-panel.paso{border-top:5px solid #D97706}.lesson-panel.practicar{border-top:5px solid #0F766E}.lesson-panel.repasar{border-top:5px solid #7C3AED}.lesson-panel.material{border-top:5px solid var(--accent)}
.main-infographic{margin:0 0 18px;border:1px solid var(--line);border-radius:20px;background:#fff;overflow:hidden}.main-infographic img{width:100%;max-height:600px;object-fit:contain;display:block;background:#FAF7F9}.main-infographic figcaption{display:grid;gap:2px;padding:12px 14px;border-top:1px solid var(--line)}.main-infographic figcaption b{color:var(--text)}.main-infographic figcaption small{color:var(--muted)}
.concept-explanation{margin-top:14px!important}.concept-dictionary{margin-top:18px;padding:18px;border:1px solid var(--line);border-radius:18px;background:#FDF8FA}.concept-dictionary h3{margin:0 0 4px}.concept-intro{margin:0 0 14px;color:var(--muted);font-size:.82rem}.concept-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.concept-term{border:1px solid #E8D3DC;background:#fff;border-radius:14px;padding:12px}.concept-term b{display:inline-block;color:var(--green-dark);font-size:.86rem;margin-bottom:4px}.concept-term p{margin:0;color:#5F4D55;font-size:.78rem;line-height:1.5}
.new-term{background:#F4DDE6;color:#6B1631;border:1px solid #E8BFD0;border-radius:5px;padding:0 .2em;font-weight:850}.concept-term .new-term{background:transparent;border:0;padding:0;color:inherit}
.material-visuals{margin-bottom:18px}.material-visuals h3{margin:0 0 10px}.lesson-footer-actions{margin-top:14px}
@media(max-width:760px){.lesson-tabs{top:66px;display:flex;overflow:auto;justify-content:flex-start}.lesson-tab{white-space:nowrap;min-width:max-content}.concept-grid{grid-template-columns:1fr}.lesson-panel{padding:16px}.main-infographic img{max-height:360px}}


/* v2.0 · Laboratorio progresivo enlazado con lecciones */
.lab-deepen-card{margin-top:18px;padding:16px;border:1px solid #DEC0CB;background:linear-gradient(135deg,#FBF1F5,#fff);border-radius:18px;display:flex;align-items:center;justify-content:space-between;gap:16px}.lab-deepen-card b{display:block;color:var(--green-dark)}.lab-deepen-card p{margin:4px 0 0;color:var(--muted);font-size:.82rem}.lab-focus-card{margin:0 0 16px;padding:18px;border:1px solid #D8A9BA;background:linear-gradient(135deg,#F9EAF0,#fff);border-radius:20px;display:flex;justify-content:space-between;gap:18px;align-items:flex-start}.lab-focus-card h2{margin:8px 0 5px}.lab-focus-card p{margin:0;color:#57444C}.lab-focus-topics{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}.lab-focus-topics span{padding:5px 8px;border-radius:999px;background:#fff;border:1px solid #E6CDD6;color:#6D1937;font-size:.7rem;font-weight:800}.lab-curriculum{margin:0 0 16px;border:1px solid var(--line);border-radius:20px;background:#fff;box-shadow:var(--shadow);overflow:hidden}.lab-curriculum summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:16px 18px;cursor:pointer;background:linear-gradient(90deg,#FBF0F4,#fff)}.lab-curriculum summary::-webkit-details-marker{display:none}.lab-curriculum summary b{display:block}.lab-curriculum summary small{display:block;color:var(--muted);margin-top:2px}.lab-curriculum summary strong{color:var(--green-dark);font-size:.8rem}.lab-path-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:14px}.lab-path-level{border:1px solid var(--line);border-radius:16px;padding:12px;background:#FCFAFB}.lab-path-level h3{margin:0 0 8px;color:var(--green-dark);font-size:.84rem}.lab-path-items{display:grid;gap:6px}.lab-path-item{width:100%;border:1px solid transparent;background:#fff;border-radius:11px;padding:9px 10px;text-align:left;display:flex;justify-content:space-between;gap:8px;align-items:center;color:var(--text)}.lab-path-item:hover{border-color:#D8A9BA;background:#FBF1F5}.lab-path-item.active{background:var(--green);color:#fff;border-color:var(--green)}.lab-path-item span{font-size:.72rem;font-weight:800;line-height:1.25}.lab-path-item small{font-size:.62rem;opacity:.78;white-space:nowrap}.lab-guide-card{margin:0 0 16px;border:1px solid #DEC0CB;border-radius:20px;padding:18px;background:#fff;box-shadow:var(--shadow)}.lab-guide-head{display:flex;justify-content:space-between;gap:18px;align-items:flex-start}.lab-guide-head h2{margin:9px 0 5px}.lab-guide-head p{margin:0;color:var(--muted);max-width:78ch}.lab-guide-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:14px;margin-top:14px}.lab-guide-grid>div{border:1px solid var(--line);border-radius:15px;padding:14px;background:#FCFAFB}.lab-guide-grid h3{margin:0 0 8px}.lab-guide-grid ol{margin:0;padding-left:20px}.lab-guide-grid li{margin:5px 0;color:#57444C}.lab-guide-grid p{margin:0 0 7px;color:#57444C}
@media(max-width:1100px){.lab-path-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.lab-focus-card,.lab-guide-head{flex-direction:column}.lab-guide-grid{grid-template-columns:1fr}}
@media(max-width:700px){.lab-path-grid{grid-template-columns:1fr}.lab-deepen-card{align-items:stretch;flex-direction:column}.lab-curriculum summary{align-items:flex-start}.lab-curriculum summary strong{display:none}}


/* v2.1 · módulos desplegables + laboratorio independiente */
.sidebar-hint{margin:12px 8px 0;padding:10px 11px;border:1px dashed var(--line);border-radius:12px;color:var(--muted);font-size:.7rem;background:var(--bg)}
.module-group{border:1px solid transparent;border-radius:16px;overflow:hidden;background:#fff}.module-group.expanded{border-color:#E7CDD7;background:#FFFBFC}.module-group+.module-group{margin-top:7px}.module-group .module-btn{width:100%;border-radius:14px;margin:0}.module-group.expanded .module-btn{border-radius:14px 14px 0 0;background:var(--green-soft)}.module-chevron{margin-left:auto;color:var(--green-dark);font-weight:950;font-size:1rem}.module-lessons{display:none;padding:5px 8px 10px;border-top:1px solid #F0E1E7;background:#fff}.module-lessons.show{display:block;animation:fadeUp .18s ease}.module-level{margin:10px 6px 4px}.module-lessons .lesson-btn{padding:8px 7px}.module-lessons .lesson-btn.active{background:var(--accent-soft)}.module-lessons .lesson-label b{font-size:.75rem}
.lab-header-copy{margin-left:auto;display:grid;text-align:right}.lab-header-copy b{font-size:.78rem;color:var(--green-dark)}.lab-header-copy small{font-size:.68rem;color:var(--muted)}.lab-back-link{display:inline-flex;align-items:center;padding:9px 13px;border-radius:11px;background:var(--green);color:#fff;font-size:.78rem;font-weight:850}.lab-standalone-app{display:grid;grid-template-columns:280px minmax(0,1fr) 250px;grid-template-areas:"left main right" "footer footer footer";min-height:calc(100vh - var(--header))}.lab-standalone-sidebar{grid-area:left;position:sticky;top:var(--header);height:calc(100vh - var(--header));overflow:auto;background:#fff;border-right:1px solid var(--line);padding:18px 12px 30px}.lab-standalone-main{grid-area:main;min-width:0;padding:22px 24px 72px}.lab-standalone-right{grid-area:right;position:sticky;top:var(--header);height:calc(100vh - var(--header));overflow:auto;background:#fff;border-left:1px solid var(--line);padding:18px 14px 30px}.lab-footer{grid-area:footer}.lab-side-level{margin-bottom:16px}.lab-side-level h3{margin:0 7px 6px;font-size:.68rem;text-transform:uppercase;letter-spacing:.07em;color:#8D6C78}.lab-side-item{width:100%;border:1px solid transparent;background:#fff;border-radius:11px;padding:8px 9px;text-align:left;display:grid;gap:2px;color:var(--text)}.lab-side-item:hover{background:#FBF1F5;border-color:#E5CAD4}.lab-side-item.active{background:var(--green-soft);border-color:#D8A9BA;color:var(--green-dark)}.lab-side-item span{font-size:.72rem;font-weight:850;line-height:1.25}.lab-side-item small{font-size:.62rem;color:var(--muted)}.lab-howto{display:grid;gap:9px}.lab-howto span{display:flex;align-items:center;gap:8px;font-size:.72rem;color:#57444C}.lab-howto b{width:24px;height:24px;border-radius:8px;display:grid;place-items:center;background:var(--green-soft);color:var(--green-dark)}
@media(max-width:1180px){.lab-standalone-app{grid-template-columns:250px minmax(0,1fr);grid-template-areas:"left main" "footer footer"}.lab-standalone-right{display:none}.lab-header-copy{display:none}}
@media(max-width:820px){.lab-standalone-app{display:block}.lab-standalone-sidebar{position:fixed;left:-290px;top:var(--header);z-index:120;width:280px;height:calc(100vh - var(--header));box-shadow:0 18px 42px rgba(36,20,26,.18);transition:left .2s}.lab-standalone-sidebar.open{left:0}.lab-standalone-main{padding:16px 12px 60px}.lab-header .mobile-menu{display:inline-grid;place-items:center}.lab-header .brand{min-width:0}.lab-header .brand span small{display:none}.lab-back-link{padding:8px 10px}.lab-footer{margin-top:0}}


/* v2.2 · acceso directo al módulo del laboratorio + marca de lección práctica */
.lab-lesson-mark{display:inline-block;margin-right:3px;filter:saturate(.9);font-size:.92em;vertical-align:baseline}
.lab-target-module{scroll-margin-top:96px}
