.review-banner{border-radius:var(--radius);margin-bottom:var(--space-5);background:var(--bg-alt);overflow:hidden}.review-banner img{object-fit:contain;width:100%;height:auto;max-height:640px;display:block}.review-header__tag{margin-bottom:var(--space-2);font-size:.8rem}.review-header__title-row{align-items:center;gap:var(--space-4);flex-wrap:wrap;display:flex}.review-header__title-row h1{font-family:var(--font-display);flex:1;min-width:0;margin:0;font-weight:900}.review-header__fechas{align-items:center;gap:var(--space-2) var(--space-4);margin-top:var(--space-2);flex-wrap:wrap;display:flex}.tutorial-article{max-width:68ch;margin:var(--space-6) auto var(--space-8)}.tutorial-metarow{margin-bottom:var(--space-2);flex-wrap:wrap;align-items:center;gap:10px;display:flex}.tutorial-steps{margin:0;padding:0;list-style:none}.tutorial-steps__item{gap:var(--space-4);padding-bottom:var(--space-6);grid-template-columns:40px 1fr;display:grid;position:relative}.tutorial-steps__item:last-child{padding-bottom:0}.tutorial-steps__item:before{content:"";background:var(--border);width:2px;position:absolute;top:40px;bottom:-4px;left:19px}.tutorial-steps__item:last-child:before{display:none}.tutorial-steps__num{background:var(--accent-detail);color:#241a04;width:40px;height:40px;font-size:.95rem;font-weight:800;font-family:var(--font-body);z-index:1;border-radius:50%;justify-content:center;align-items:center;display:flex}.tutorial-steps__body{min-width:0;padding-top:4px}.tutorial-steps__title{font-family:var(--font-body);letter-spacing:0;color:var(--text);scroll-margin-top:calc(var(--header-height) + var(--space-4));margin:0 0 8px;font-size:1.02rem;font-weight:700;line-height:1.45}a.tutorial-steps__num{text-decoration:none;transition:box-shadow .15s}a.tutorial-steps__num:hover{box-shadow:0 0 0 3px var(--accent-detail-bg);text-decoration:none}a.tutorial-steps__num:focus-visible{outline:2px solid var(--accent-detail);outline-offset:3px}.tutorial-toc{margin:var(--space-6) 0;padding:var(--space-4) var(--space-5);background:var(--bg-alt);border:1px solid var(--border);border-radius:var(--radius)}.tutorial-toc__title{font-family:var(--font-body);color:var(--text-secondary);margin:0 0 var(--space-3);letter-spacing:0;font-size:.85rem;font-weight:700}.tutorial-toc__list{gap:2px;margin:0;padding:0;list-style:none;display:grid}.tutorial-toc__link{align-items:baseline;gap:var(--space-3);padding:6px var(--space-2);margin:0 calc(var(--space-2) * -1);border-radius:var(--radius-sm);color:var(--text);font-size:.92rem;line-height:1.4;transition:background .15s;display:flex}.tutorial-toc__link:hover{background:var(--bg);text-decoration:none}.tutorial-toc__num{font-variant-numeric:tabular-nums;min-width:1.4em;color:var(--accent-detail);flex-shrink:0;font-weight:800}.tutorial-aviso{gap:var(--space-3);margin:var(--space-3) 0 calc(var(--space-3) * -1 + 6px);padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm);color:var(--text);background:#ef44441a;border:1px solid #ef444473;align-items:flex-start;font-size:.9rem;line-height:1.5;display:flex}.tutorial-aviso p{margin:0}.tutorial-aviso strong{color:#fca5a5}.tutorial-aviso__icono{color:#f87171;flex-shrink:0;margin-top:2px}.tutorial-code-block--destructivo{border-color:#ef444473}.tutorial-code-block{border:1px solid var(--border);border-radius:var(--radius-sm);margin:var(--space-3) 0;background:#0a0f1c;overflow:hidden}.tutorial-code-block__bar{border-bottom:1px solid var(--border);background:#0e1526;justify-content:space-between;align-items:center;padding:7px 13px;display:flex}.tutorial-code-block__lang{color:var(--accent-detail);text-transform:uppercase;letter-spacing:.05em;font-family:ui-monospace,Cascadia Code,SFMono-Regular,Consolas,monospace;font-size:.68rem;font-weight:700}.tutorial-code-block__copy{color:var(--text-secondary);border:1px solid var(--border);cursor:pointer;font-size:.7rem;font-weight:600;font-family:var(--font-body);background:0 0;border-radius:4px;padding:3px 9px}.tutorial-code-block__copy:hover{color:var(--text);border-color:var(--accent-light)}.tutorial-code-block pre:focus-visible{outline:2px solid var(--accent-detail);outline-offset:-2px}.tutorial-code-block pre{color:#d7e0f0;white-space:pre;margin:0;padding:13px 15px;font-family:ui-monospace,Cascadia Code,SFMono-Regular,Consolas,monospace;font-size:.84rem;overflow-x:auto}.tutorial-conclusion{background:var(--bg-alt);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-4) var(--space-5);margin:var(--space-6) 0}.tutorial-conclusion h4,.tutorial-conclusion__title{letter-spacing:0;font-family:var(--font-display);margin:0 0 var(--space-2);font-size:1rem}.objetivo-box{gap:var(--space-3);padding:var(--space-4) var(--space-5);margin:var(--space-4) 0;background:linear-gradient(135deg, var(--stack-accent-bg), transparent);border-radius:var(--radius);border:1px solid #0fa69a4d;align-items:flex-start;display:flex}.objetivo-box__icon{color:var(--stack-accent-text);flex-shrink:0;margin-top:2px}.objetivo-box__label{text-transform:uppercase;letter-spacing:.08em;color:var(--stack-accent-text);margin:0 0 4px;font-size:.68rem;font-weight:800}.objetivo-box__text{color:var(--text);margin:0;font-size:1.02rem;font-weight:500;line-height:1.5}.component-list{gap:var(--space-3);margin-bottom:var(--space-5);flex-direction:column;display:flex}.component-row{justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-4);background:var(--bg-alt);border:1px solid var(--border);border-radius:var(--radius);display:flex}.component-row__main{min-width:0}.component-row__rol{text-transform:uppercase;letter-spacing:.05em;color:var(--stack-accent-text);margin:0 0 3px;font-size:.7rem;font-weight:700}.component-row__name{color:var(--text);margin:0;font-size:.98rem;font-weight:700}.component-row__name a{color:var(--accent-light)}.component-row__res{gap:var(--space-3);color:var(--text-secondary);white-space:nowrap;font-variant-numeric:tabular-nums;flex-shrink:0;font-family:ui-monospace,Cascadia Code,SFMono-Regular,Consolas,monospace;font-size:.8rem;display:flex}.component-row__res b{color:var(--text);font-weight:700}.component-row__res-none{color:var(--text-secondary);opacity:.75;font-style:italic}@media (width<=560px){.component-row{flex-direction:column;align-items:flex-start}.component-row__res{flex-wrap:wrap}}.resources-total{justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-4) var(--space-5);margin-bottom:var(--space-6);border-radius:var(--radius);background:#0fa69a17;border:1px solid #0fa69a4d;flex-wrap:wrap;display:flex}.resources-total__label{color:var(--text-secondary);font-size:.85rem}.resources-total__values{gap:var(--space-5);font-variant-numeric:tabular-nums;font-family:ui-monospace,Cascadia Code,SFMono-Regular,Consolas,monospace;display:flex}.resources-total__values .v{color:var(--stack-accent-text);font-size:1.1rem;font-weight:700}.resources-total__values .u{color:var(--text-secondary);font-size:.66rem;font-family:var(--font-body);display:block}.diagrama-frame{border-radius:var(--radius);background:var(--bg-alt);margin-bottom:var(--space-2);border:1px solid #0fa69a4d;overflow:hidden}.diagrama-img{cursor:zoom-in;width:100%;height:auto;transition:opacity .12s;display:block}.diagrama-img:hover{opacity:.9}.diagrama-hint{color:var(--text-secondary);margin:0 0 var(--space-6);align-items:center;gap:6px;font-size:.78rem;display:flex}.stack-article .tutorial-steps__num{background:var(--stack-accent);color:#05231f}.stack-article .tutorial-code-block__lang{color:var(--stack-accent-text)}.diagrama-ampliable{width:100%}.bloque-codigo{border-radius:var(--radius);background:#070b14;margin:14px 0 6px}.bloque-codigo__barra{background:#111a2c;align-items:flex-end;height:40px;padding:0 8px 0 0}.bloque-codigo__pestana{border:1px solid var(--border);letter-spacing:0;text-transform:none;height:31px;color:var(--text);background:#070b14;border-bottom:0;border-radius:6px 6px 0 0;align-items:center;gap:8px;margin-left:8px;padding:0 14px;font-size:12.5px;font-weight:600;display:inline-flex;position:relative;top:1px}.bloque-codigo__copiar{border-color:var(--scroll-thumb);height:28px;color:var(--tipo-analisis);border-radius:5px;align-self:center;align-items:center;gap:6px;padding:0 10px;font-size:12.5px;font-weight:500;display:inline-flex}.bloque-codigo pre{color:var(--tipo-analisis);tab-size:2;padding:16px 18px;font-size:14px;line-height:1.7}.bloque-codigo code{font:inherit;color:inherit;background:0 0;padding:0}.tk-cmd{color:var(--text);font-weight:600}.tk-opt{color:var(--accent-detail)}.tk-str{color:var(--accent-light)}.tk-var{color:#e7b4bb}.tk-com{color:var(--text-secondary)}@media (width<=700px){.bloque-codigo pre{font-size:13px}}.tutorial-toc__progreso{display:none}@media (width>=1100px){.tutorial-article:has(>.tutorial-toc){grid-template-columns:220px minmax(0,68ch) 220px;justify-content:center;column-gap:20px;max-width:none;display:grid}.tutorial-article:has(>.tutorial-toc)>*{grid-column:2}.tutorial-article:has(>.tutorial-toc)>.tutorial-toc{background:0 0;border:0;border-radius:0;grid-area:1/1/span 40;align-self:start;margin:0;padding:0;position:sticky;top:72px}.tutorial-article:has(>.tutorial-toc) .tutorial-toc__title{letter-spacing:.1em;text-transform:uppercase;margin-bottom:10px;font-size:13px;font-weight:700}.tutorial-article:has(>.tutorial-toc) .tutorial-toc__list{border-left:1px solid var(--border);gap:0}.tutorial-article:has(>.tutorial-toc) .tutorial-toc__link{color:var(--text-secondary);border-left:2px solid #0000;border-radius:0;margin:0 0 0 -1px;padding:6px 0 6px 14px;font-size:14px;line-height:1.35}.tutorial-article:has(>.tutorial-toc) .tutorial-toc__link:hover{color:var(--text);background:0 0}.tutorial-article:has(>.tutorial-toc) .tutorial-toc__link[aria-current=step]{border-left-color:var(--accent-detail);color:var(--text);font-weight:600}.tutorial-article:has(>.tutorial-toc) .tutorial-toc__progreso{color:var(--text-secondary);font-variant-numeric:tabular-nums;margin:14px 0 0;font-size:13px;display:block}}.review-banner{border-radius:var(--radio-media)}.review-header__tag{letter-spacing:.08em;font-size:13px}.bloque-codigo__pestana:before,.bloque-codigo__copiar:before{content:"";width:13px;height:13px;-webkit-mask:var(--icono) center / contain no-repeat;mask:var(--icono) center / contain no-repeat;background:currentColor;flex-shrink:0}.bloque-codigo__pestana:before{--icono:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 7l5 5-5 5M12 18h8'/%3E%3C/svg%3E");background:var(--accent-detail)}.bloque-codigo__pestana--fichero:before{--icono:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 3v5h5'/%3E%3C/svg%3E")}.bloque-codigo__copiar:before{--icono:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 9h9a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-9a2 2 0 0 1-2-2v-9a2 2 0 0 1 2-2z'/%3E%3Cpath d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1'/%3E%3C/svg%3E")}.bloque-codigo__copiar.is-copiado:before{--icono:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E")}.diagrama-ampliable:focus-visible{outline-offset:-3px}
