/*
Theme Name: Nudo Labs
Theme URI: https://nudolabs.com
Author: Nudo Labs
Description: Tema del blog de Nudo Labs, con el mismo sistema visual del sitio principal.
Version: 1.0
Text Domain: nudolabs
*/

:root{
  --bg: #050505;
  --bg-elev: #0d0d0d;
  --bg-elev-2: #131313;
  --line: rgba(255,255,255,0.10);
  --line-soft: rgba(255,255,255,0.06);
  --verde: #dcff59;
  --verde-dim: rgba(220,255,89,0.14);
  --ink: #f4f4f0;
  --gray: #9a9a95;
  --gray-dim: #605f5a;
  --font-sans: "Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --container: 980px;
}

*{ margin:0; padding:0; box-sizing:border-box; }

html{ scroll-behavior:smooth; }

body{
  background:var(--bg);
  color:var(--ink);
  font-family:var(--font-sans);
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

img{ max-width:100%; display:block; }
a{ color:inherit; text-decoration:none; }
ul,ol{ list-style:none; }
::selection{ background:var(--verde); color:#0a0a0a; }

.wrap{ max-width:var(--container); margin:0 auto; padding:0 24px; }
.wrap-wide{ max-width:1100px; margin:0 auto; padding:0 24px; }

/* ---------- navbar ---------- */

.nl-navbar{
  position:fixed;
  top:0; left:50%;
  transform:translateX(-50%);
  width:100%;
  z-index:100;
  padding:20px 0;
  transition:padding .4s cubic-bezier(.4,0,.2,1), width .4s cubic-bezier(.4,0,.2,1),
    top .4s cubic-bezier(.4,0,.2,1), border-radius .4s cubic-bezier(.4,0,.2,1),
    background .4s ease, border-color .4s ease, box-shadow .4s ease;
  border:1px solid transparent;
  border-radius:0;
}

.nl-navbar.is-scrolled{
  top:14px;
  width:min(92%, 980px);
  padding:10px 0;
  border-radius:999px;
  background:rgba(8,8,8,.85);
  backdrop-filter:blur(18px) saturate(180%);
  -webkit-backdrop-filter:blur(18px) saturate(180%);
  border-color:rgba(255,255,255,.1);
  box-shadow:0 8px 30px rgba(0,0,0,.35);
}

/* single posts start on a white background, so keep the navbar
   opaque even before the user scrolls (otherwise white text on
   white content would be invisible at the top of the page) */
body.single .nl-navbar:not(.is-scrolled){
  background:rgba(8,8,8,.85);
  backdrop-filter:blur(18px) saturate(180%);
  -webkit-backdrop-filter:blur(18px) saturate(180%);
  border-bottom:1px solid rgba(255,255,255,.08);
}

.nl-navbar-inner{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  padding:0 28px;
}

.nl-navbar.is-scrolled .nl-navbar-inner{ padding:0 10px 0 22px; }

.nl-logo img{ height:20px; width:auto; }

.nl-navbar-links{
  display:flex;
  align-items:center;
  gap:24px;
  font-size:.86rem;
  color:var(--gray);
}

.nl-navbar-links a{ white-space:nowrap; transition:color .2s ease; }
.nl-navbar-links a:hover{ color:var(--ink); }

.nl-navbar-cta{
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:11px 20px;
  border-radius:999px;
  background:var(--verde);
  color:#0a0a0a;
  font-size:.85rem;
  font-weight:600;
  white-space:nowrap;
}

.nl-navbar-right{
  display:flex;
  align-items:center;
  gap:14px;
}

.nl-search-toggle{
  display:flex;
  align-items:center;
  justify-content:center;
  width:36px; height:36px;
  border-radius:50%;
  border:1px solid transparent;
  background:none;
  color:var(--ink);
  flex:none;
  transition:border-color .2s ease, color .2s ease;
}

.nl-search-toggle:hover, .nl-search-toggle.is-active{
  border-color:var(--line);
  color:var(--verde);
}

.nl-burger{
  display:none;
  flex-direction:column;
  justify-content:center;
  gap:5px;
  width:36px; height:36px;
  background:none;
  border:none;
  flex:none;
}

.nl-burger span{
  height:2px;
  width:100%;
  background:var(--ink);
  border-radius:2px;
  transition:transform .25s ease, opacity .25s ease;
}

.nl-burger.is-open span:nth-child(1){ transform:translateY(7px) rotate(45deg); }
.nl-burger.is-open span:nth-child(2){ opacity:0; }
.nl-burger.is-open span:nth-child(3){ transform:translateY(-7px) rotate(-45deg); }

.nl-search-panel{
  max-height:0;
  overflow:hidden;
  transition:max-height .3s ease;
}

.nl-search-panel.is-open{ max-height:100px; }

.nl-search-form{
  display:flex;
  align-items:center;
  gap:10px;
  margin-top:16px;
  padding:10px 8px 10px 18px;
  border:1px solid var(--line);
  border-radius:999px;
  background:var(--bg-elev);
}

.nl-search-input{
  flex:1;
  background:none;
  border:none;
  outline:none;
  color:var(--ink);
  font-family:var(--font-sans);
  font-size:.95rem;
}

.nl-search-input::placeholder{ color:var(--gray-dim); }

.nl-search-submit{
  display:flex;
  align-items:center;
  justify-content:center;
  width:34px; height:34px;
  border-radius:50%;
  background:var(--verde);
  color:#0a0a0a;
  border:none;
  flex:none;
}

.nl-mobile-menu{
  display:none;
  position:fixed;
  inset:0;
  top:66px;
  z-index:99;
  background:var(--bg);
  padding:32px 24px;
  flex-direction:column;
  gap:28px;
  opacity:0;
  transform:translateY(-12px);
  pointer-events:none;
  transition:opacity .25s ease, transform .25s ease;
}

.nl-mobile-menu.is-open{
  opacity:1;
  transform:translateY(0);
  pointer-events:auto;
}

.nl-mobile-menu nav{
  display:flex;
  flex-direction:column;
  gap:22px;
  font-size:1.3rem;
  font-weight:600;
}

.nl-mobile-menu .nl-navbar-cta{ align-self:flex-start; }

@media (max-width: 760px){
  .nl-navbar-links{ display:none; }
  .nl-navbar-inner > .nl-navbar-right > .nl-navbar-cta{ display:none; }
  .nl-burger{ display:flex; }
  .nl-mobile-menu{ display:flex; }
}

/* ---------- category link in meta ---------- */

.nl-meta a{ color:var(--gray); text-decoration:underline; text-underline-offset:2px; }
.nl-meta a:hover{ color:var(--verde); }

/* ---------- hero / blog header ---------- */

.nl-blog-hero{
  position:relative;
  padding:170px 0 80px;
  border-bottom:1px solid var(--line-soft);
  overflow:hidden;
}

.grid-bg{
  position:absolute;
  inset:0;
  background-image:
    linear-gradient(to right, var(--line-soft) 1px, transparent 1px),
    linear-gradient(to bottom, var(--line-soft) 1px, transparent 1px);
  background-size:64px 64px;
  mask-image:radial-gradient(ellipse 60% 50% at 50% 30%, black 40%, transparent 90%);
  pointer-events:none;
}

.nl-blog-hero img.nl-mark{
  position:absolute;
  top:-10%; right:-12%;
  width:520px;
  max-width:55vw;
  opacity:.10;
  pointer-events:none;
}

.nl-eyebrow{
  display:inline-flex;
  align-items:center;
  gap:8px;
  font-family:var(--font-mono);
  font-size:.76rem;
  letter-spacing:.06em;
  text-transform:uppercase;
  color:var(--gray);
  margin-bottom:20px;
}

.nl-eyebrow::before{
  content:"";
  width:6px; height:6px;
  border-radius:50%;
  background:var(--verde);
}

.nl-blog-hero h1{
  position:relative;
  z-index:1;
  font-size:clamp(2.2rem, 5vw, 3.4rem);
  font-weight:700;
  letter-spacing:-.02em;
  line-height:1.1;
  margin-bottom:18px;
  max-width:700px;
}

.nl-blog-hero p{
  position:relative;
  z-index:1;
  color:var(--gray);
  font-size:1.05rem;
  max-width:520px;
  line-height:1.6;
}

/* ---------- post list ---------- */

.nl-post-list{
  padding:64px 0 120px;
}

.nl-post-card{
  padding:36px 0;
  border-bottom:1px solid var(--line-soft);
}

.nl-post-card .nl-meta{
  font-family:var(--font-mono);
  font-size:.76rem;
  letter-spacing:.03em;
  color:var(--gray);
  text-transform:uppercase;
  margin-bottom:12px;
}

.nl-post-card-link{ transition:opacity .2s ease; }
.nl-post-card-link:hover{ opacity:.75; }

.nl-post-card h2{
  font-size:1.6rem;
  font-weight:700;
  letter-spacing:-.01em;
  margin-bottom:12px;
  line-height:1.25;
}

.nl-post-card .nl-excerpt{
  color:var(--gray);
  font-size:1rem;
  line-height:1.65;
  max-width:640px;
}

.nl-post-card .nl-readmore{
  display:inline-flex;
  align-items:center;
  gap:6px;
  margin-top:16px;
  font-size:.88rem;
  font-weight:600;
  color:var(--verde);
}

.nl-pagination{
  display:flex;
  gap:12px;
  padding-top:20px;
  font-family:var(--font-mono);
  font-size:.85rem;
}

.nl-pagination a, .nl-pagination span{
  padding:8px 16px;
  border-radius:999px;
  border:1px solid var(--line);
  color:var(--gray);
}

.nl-pagination a:hover{ border-color:var(--verde); color:var(--verde); }
.nl-pagination .current{ border-color:var(--verde); color:var(--verde); }

/* ---------- single post (light background) ---------- */

.nl-single{
  padding:170px 0 100px;
  background:#f5f5f1;
  color:#0a0a0a;
}

.nl-single .nl-meta{
  font-family:var(--font-mono);
  font-size:.78rem;
  letter-spacing:.03em;
  text-transform:uppercase;
  color:#6a6a64;
  margin-bottom:20px;
}

.nl-single .nl-meta a{ color:#6a6a64; text-decoration:underline; text-underline-offset:2px; }
.nl-single .nl-meta a:hover{ color:#0a0a0a; }

.nl-single h1{
  font-size:clamp(2rem, 4.4vw, 3rem);
  font-weight:700;
  letter-spacing:-.02em;
  line-height:1.15;
  margin-bottom:32px;
  color:#0a0a0a;
}

.nl-single .nl-back{ color:#6a6a64; }
.nl-single .nl-back:hover{ color:#0a0a0a; }

.nl-single .nl-featured{
  border-radius:20px;
  overflow:hidden;
  margin-bottom:40px;
  border:1px solid rgba(10,10,10,.12);
}

.nl-content{
  font-size:1.08rem;
  line-height:1.8;
  color:#3a3a35;
}

.nl-content > * + *{ margin-top:1.4em; }

.nl-content h2{
  font-size:1.5rem;
  font-weight:700;
  color:#0a0a0a;
  letter-spacing:-.01em;
  margin-top:2em;
}

.nl-content h3{
  font-size:1.2rem;
  font-weight:700;
  color:#0a0a0a;
  margin-top:1.8em;
}

.nl-content a{
  color:#0a0a0a;
  text-decoration:underline;
  text-decoration-color:var(--verde);
  text-decoration-thickness:2px;
  text-underline-offset:3px;
}

.nl-content strong{ color:#0a0a0a; }

.nl-content blockquote{
  border-left:3px solid var(--verde);
  padding:4px 0 4px 24px;
  color:#0a0a0a;
  font-style:italic;
}

.nl-content ul, .nl-content ol{
  padding-left:1.4em;
  list-style:disc;
}

.nl-content ol{ list-style:decimal; }

.nl-content img{
  border-radius:16px;
  border:1px solid rgba(10,10,10,.12);
  max-height:560px;
  width:auto;
  object-fit:contain;
  margin-left:auto;
  margin-right:auto;
}

.nl-content pre{
  background:var(--bg);
  border:1px solid rgba(10,10,10,.12);
  border-radius:12px;
  padding:20px;
  overflow-x:auto;
  font-family:var(--font-mono);
  font-size:.88rem;
  color:var(--ink);
}

.nl-content code{
  font-family:var(--font-mono);
  background:rgba(10,10,10,.06);
  color:#0a0a0a;
  padding:2px 6px;
  border-radius:6px;
  font-size:.9em;
}

.nl-content pre code{ background:none; color:inherit; padding:0; }

.nl-back{
  display:inline-flex;
  align-items:center;
  gap:8px;
  margin-bottom:40px;
  font-size:.9rem;
  color:var(--gray);
}

.nl-back:hover{ color:var(--verde); }

.nl-single-footer{
  margin-top:64px;
  padding-top:32px;
  border-top:1px solid rgba(10,10,10,.12);
  display:flex;
  align-items:center;
  justify-content:space-between;
  flex-wrap:wrap;
  gap:20px;
}

.nl-single-footer p{ color:#3a3a35; }

.nl-btn{
  display:inline-flex;
  align-items:center;
  gap:10px;
  padding:14px 24px;
  border-radius:999px;
  background:var(--verde);
  color:#0a0a0a;
  font-weight:600;
  font-size:.92rem;
}

/* ---------- footer ---------- */

.nl-footer{
  border-top:1px solid var(--line-soft);
  padding:48px 0 32px;
}

.nl-footer-top{
  display:flex;
  align-items:center;
  justify-content:space-between;
  flex-wrap:wrap;
  gap:20px;
  padding-bottom:28px;
  border-bottom:1px solid var(--line-soft);
}

.nl-footer-top img{ height:18px; }

.nl-footer-links{ display:flex; gap:22px; font-size:.88rem; color:var(--gray); }
.nl-footer-links a:hover{ color:var(--verde); }

.nl-footer-bottom{
  padding-top:20px;
  font-size:.78rem;
  color:var(--gray-dim);
  display:flex;
  justify-content:space-between;
  flex-wrap:wrap;
  gap:8px;
}

/* ---------- misc ---------- */

.nl-empty{
  padding:120px 0;
  text-align:center;
  color:var(--gray);
}

@media (max-width: 640px){
  .nl-blog-hero{ padding:140px 0 60px; }
  .nl-single{ padding:140px 0 70px; }
}
