@import url('https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,500;0,6..72,600;1,6..72,500&family=Inter:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap');

:root{
  --paper:#F2EDE3;
  --paper-dim:#E9E1D1;
  --ink:#211A12;
  --ink-soft:rgba(33,26,18,0.62);
  --ink-faint:rgba(33,26,18,0.14);
  --board:#D8CBB0;
  --blueprint:#35506B;
  --sawdust:#B5732C;
  --success:#4F7A5B;
  --pending:#A8792E;
  --danger:#A34B3D;
  --radius:3px;
  --nova:#3D7DFF;
  --nova-dark:#2C5FD9;
  --nova-violet:#7C6CFF;
  --nova-deep:#060914;
}
*{ box-sizing:border-box; }
html{ scroll-behavior:smooth; }
body{
  margin:0;
  font-family:'Inter', sans-serif;
  background:var(--paper);
  color:var(--ink);
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
.mono{ font-family:'IBM Plex Mono', monospace; }
a:focus-visible, button:focus-visible, input:focus-visible{
  outline:2px solid var(--sawdust);
  outline-offset:2px;
}
h1,h2,h3{
  font-family:'Newsreader', serif;
  font-weight:600;
  margin:0;
  letter-spacing:-0.01em;
}
a{ color:inherit; }
button{ font-family:inherit; cursor:pointer; }
.hidden{ display:none !important; }
.wrap{ max-width:1100px; margin:0 auto; padding:0 28px; }

/* ---------- NAV / BRAND ---------- */
nav.topbar{
  position:sticky; top:0; z-index:40;
  display:flex; align-items:center; justify-content:space-between;
  padding:18px 28px;
  background:rgba(242,237,227,0.9);
  backdrop-filter:blur(6px);
  border-bottom:1px solid var(--ink-faint);
}
.brand{ display:flex; align-items:center; gap:10px; text-decoration:none; color:var(--ink); }
.brand-mark{
  width:26px; height:26px; position:relative; flex:none;
  background:var(--blueprint);
  display:grid; grid-template-columns:1fr 1fr; grid-template-rows:1fr 1fr; gap:2px; padding:3px;
}
.brand-mark span{ background:var(--paper); }
.brand-text{ line-height:1.1; }
.brand-name{ font-family:'Newsreader', serif; font-weight:600; font-size:18px; letter-spacing:-0.01em; }
.brand-tagline{ font-family:'IBM Plex Mono', monospace; font-size:9.5px; letter-spacing:0.08em; text-transform:uppercase; color:var(--ink-soft); }
.navlinks{ display:flex; align-items:center; gap:24px; font-size:14px; }
.navlinks a.navlink{ color:var(--ink-soft); text-decoration:none; }
.navlinks a.navlink:hover{ color:var(--ink); }

.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  padding:12px 22px;
  min-height:44px;
  border-radius:var(--radius);
  border:1px solid transparent;
  font-size:14px; font-weight:600; letter-spacing:0.01em;
  text-decoration:none;
  transition:transform .15s ease, background .15s ease, border-color .15s ease, box-shadow .15s ease;
}
.btn-primary{ background:var(--sawdust); color:#fff; box-shadow:0 1px 2px rgba(33,26,18,0.1); }
.btn-primary:hover{ background:#9c611f; transform:translateY(-2px); box-shadow:0 12px 22px -10px rgba(181,115,44,0.6); }
.btn-primary:active{ transform:translateY(0) scale(0.97); box-shadow:0 3px 8px -3px rgba(181,115,44,0.5); }
.btn-ghost{ background:transparent; border-color:var(--ink-faint); color:var(--ink); }
.btn-ghost:hover{ border-color:var(--ink); background:rgba(33,26,18,0.03); transform:translateY(-1px); }
.btn-ghost:active{ transform:translateY(0) scale(0.97); }
.btn-dark{ background:var(--ink); color:var(--paper); }
.btn-dark:hover{ background:#39291a; transform:translateY(-2px); box-shadow:0 12px 22px -10px rgba(33,26,18,0.4); }
.btn-dark:active{ transform:translateY(0) scale(0.97); }
.btn-danger-outline{ background:transparent; border-color:rgba(163,75,61,0.4); color:var(--danger); }
.btn-danger-outline:hover{ border-color:var(--danger); background:rgba(163,75,61,0.08); transform:translateY(-1px); }
.btn-danger-outline:active{ transform:translateY(0) scale(0.97); }
.btn-block{ width:100%; }
.btn[disabled]{ opacity:0.55; cursor:default; transform:none !important; box-shadow:none !important; }
.btn-sm{ padding:8px 14px; font-size:12.5px; min-height:38px; }

/* ---------- HERO ---------- */
header.hero{ padding:80px 0 96px; }
.hero-grid{ display:grid; grid-template-columns:1.05fr 0.95fr; gap:64px; align-items:center; }
.eyebrow{
  font-family:'IBM Plex Mono', monospace;
  font-size:12px; letter-spacing:0.12em; text-transform:uppercase;
  color:var(--blueprint);
  display:flex; align-items:center; gap:10px;
  margin-bottom:18px;
}
.eyebrow::before{ content:""; width:20px; height:1px; background:var(--blueprint); }
h1.display{ font-size:50px; line-height:1.05; margin-bottom:22px; }
h1.display em{ font-style:italic; color:var(--sawdust); }
p.lede{ font-size:17px; line-height:1.6; color:var(--ink-soft); max-width:46ch; margin-bottom:32px; }
.hero-cta{ display:flex; align-items:center; gap:18px; flex-wrap:wrap; }
.hero-cta .fine{ font-size:12.5px; color:var(--ink-soft); }

/* Signature: cutting-diagram (nesting layout) */
.cut-diagram{ background:var(--ink); border-radius:4px; padding:18px; box-shadow:0 30px 60px -30px rgba(33,26,18,0.5); }
.cut-board{
  position:relative; width:100%; aspect-ratio:4/3;
  background:
    repeating-linear-gradient(90deg, rgba(242,237,227,0.06) 0 1px, transparent 1px 24px),
    repeating-linear-gradient(0deg, rgba(242,237,227,0.06) 0 1px, transparent 1px 24px),
    var(--ink);
  border:1px dashed rgba(242,237,227,0.25);
}
.piece{ position:absolute; background:var(--board); border:1px solid rgba(33,26,18,0.35); display:flex; align-items:flex-end; justify-content:flex-start; padding:6px; }
.piece span{ font-family:'IBM Plex Mono', monospace; font-size:10px; color:var(--ink-soft); }
.piece.alt{ background:var(--paper); }
.piece.accent{ background:var(--sawdust); }
.piece.accent span{ color:rgba(255,255,255,0.85); }
.cut-caption{ font-family:'IBM Plex Mono', monospace; font-size:11px; color:rgba(242,237,227,0.55); display:flex; justify-content:space-between; margin-top:12px; }

/* ---------- PILLARS ---------- */
section.pillars{ padding:40px 0 100px; border-top:1px solid var(--ink-faint); }
.pillars-head{ display:flex; align-items:baseline; justify-content:space-between; margin-bottom:44px; flex-wrap:wrap; gap:12px; }
.pillars-head h2{ font-size:30px; }
.pillars-head p{ color:var(--ink-soft); font-size:14px; max-width:32ch; }
.pillar-row{ display:grid; grid-template-columns:repeat(3,1fr); gap:1px; background:var(--ink-faint); border:1px solid var(--ink-faint); }
.pillar{ background:var(--paper); padding:32px 28px; transition:background .2s ease, transform .2s ease; }
.pillar:hover{ background:#fff; transform:translateY(-4px); }
.pillar .step{ font-family:'IBM Plex Mono', monospace; font-size:12px; color:var(--blueprint); margin-bottom:16px; }
.pillar h3{ font-size:21px; margin-bottom:10px; }
.pillar p{ font-size:14px; line-height:1.55; color:var(--ink-soft); }

/* ---------- CLOSING CTA ---------- */
section.closing{ padding:90px 0 100px; }
.closing-box{ background:var(--blueprint); color:var(--paper); border-radius:6px; padding:60px 48px; display:flex; align-items:center; justify-content:space-between; gap:32px; flex-wrap:wrap; }
.closing-box h2{ font-size:30px; max-width:18ch; color:#fff; }
.closing-box p{ color:rgba(242,237,227,0.7); font-size:14px; margin-top:10px; max-width:40ch; }

footer.site-footer{ padding:32px 0; border-top:1px solid var(--ink-faint); }
.footer-row{ display:flex; justify-content:space-between; align-items:center; font-size:12.5px; color:var(--ink-soft); flex-wrap:wrap; gap:10px; }

/* ---------- AUTH / STATUS PAGES ---------- */
.center-screen{ min-height:100vh; display:flex; align-items:center; justify-content:center; padding:24px; }
.auth-card{ width:100%; max-width:430px; background:#fff; border:1px solid var(--ink-faint); border-radius:6px; padding:44px 38px; position:relative; overflow:hidden; }
.auth-card::before{ content:""; position:absolute; top:0; left:0; right:0; height:4px; background:linear-gradient(90deg, var(--sawdust), var(--blueprint)); }
.auth-back{ font-size:13px; color:var(--ink-soft); text-decoration:none; display:inline-flex; align-items:center; gap:6px; margin-bottom:22px; }
.auth-card .eyebrow{ margin-bottom:8px; }
.auth-card h1{ font-size:26px; margin-bottom:6px; }
.auth-card .sub{ font-size:13.5px; color:var(--ink-soft); margin-bottom:28px; }

.field{ margin-bottom:18px; }
.field label{ display:block; font-family:'IBM Plex Mono', monospace; font-size:11px; letter-spacing:0.06em; text-transform:uppercase; color:var(--ink-soft); margin-bottom:6px; }
.field input{ width:100%; padding:12px 13px; font-family:'Inter', sans-serif; font-size:14.5px; border:1px solid var(--ink-faint); border-radius:var(--radius); background:var(--paper); color:var(--ink); }
.field input:focus{ outline:none; border-color:var(--sawdust); background:#fff; }
.field .hint{ font-size:11.5px; color:var(--ink-soft); margin-top:5px; }

.switch-line{ text-align:center; font-size:13px; color:var(--ink-soft); margin-top:20px; }
.switch-line a{ color:var(--sawdust); font-weight:600; text-decoration:none; cursor:pointer; }

.alert{ font-size:13px; line-height:1.5; padding:11px 13px; border-radius:var(--radius); margin-top:16px; display:none; }
.alert.show{ display:block; }
.alert.err{ background:rgba(163,75,61,0.1); color:var(--danger); }
.alert.ok{ background:rgba(79,122,91,0.1); color:var(--success); }

.status-card{ max-width:460px; text-align:center; }
.status-icon{ width:52px; height:52px; margin:0 auto 24px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-family:'IBM Plex Mono', monospace; font-size:18px; }
.status-icon.wait{ background:rgba(168,121,46,0.14); color:var(--pending); }
.status-icon.stop{ background:rgba(163,75,61,0.14); color:var(--danger); }
.status-card h1{ font-size:24px; margin-bottom:14px; }
.status-card p{ color:var(--ink-soft); font-size:14.5px; line-height:1.6; margin-bottom:26px; }

/* ---------- APP SHELL ---------- */
.appbar{ display:flex; align-items:center; justify-content:space-between; padding:16px 28px; border-bottom:1px solid var(--ink-faint); background:#fff; position:sticky; top:0; z-index:30; }
.appbar .who{ font-size:13px; color:var(--ink-soft); }
.appbar .who strong{ color:var(--ink); }
.appbar-actions{ display:flex; align-items:center; gap:14px; }
.admin-pill{ font-family:'IBM Plex Mono', monospace; font-size:10.5px; letter-spacing:0.06em; color:var(--blueprint); background:rgba(53,80,107,0.1); padding:3px 8px; border-radius:20px; }

main.app-main{ padding:56px 28px; max-width:900px; margin:0 auto; }
.welcome-box{ text-align:center; padding:60px 20px; }
.welcome-box .eyebrow{ justify-content:center; }
.welcome-box h1{ font-size:32px; margin-bottom:14px; }
.welcome-box p{ color:var(--ink-soft); font-size:15px; max-width:44ch; margin:0 auto; }

/* ---------- ADMIN ---------- */
.admin-wrap{ max-width:1150px; margin:0 auto; padding:40px 28px 80px; }
.admin-head{ display:flex; align-items:baseline; justify-content:space-between; margin-bottom:6px; flex-wrap:wrap; gap:10px; }
.admin-head h1{ font-size:28px; }
.admin-sub{ color:var(--ink-soft); font-size:13.5px; margin-bottom:32px; }

.stat-row{ display:grid; grid-template-columns:repeat(3,1fr); gap:1px; background:var(--ink-faint); border:1px solid var(--ink-faint); margin-bottom:28px; }
.stat{ background:#fff; padding:20px 22px; }
.stat .n{ font-family:'IBM Plex Mono', monospace; font-size:26px; }
.stat .l{ font-size:12px; color:var(--ink-soft); text-transform:uppercase; letter-spacing:0.05em; margin-top:4px; }

.admin-toolbar{ display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:16px; flex-wrap:wrap; }
.search-field{ position:relative; flex:1; min-width:220px; max-width:340px; }
.search-field input{ width:100%; padding:10px 13px; font-family:'Inter',sans-serif; font-size:13.5px; border:1px solid var(--ink-faint); border-radius:var(--radius); background:#fff; }
.search-field input:focus{ outline:none; border-color:var(--sawdust); }
.filter-tabs{ display:flex; gap:6px; flex-wrap:wrap; }
.filter-tab{ padding:7px 13px; font-size:12.5px; border-radius:20px; border:1px solid var(--ink-faint); background:#fff; color:var(--ink-soft); }
.filter-tab.active{ background:var(--ink); color:var(--paper); border-color:var(--ink); }

table.users-table{ width:100%; border-collapse:collapse; background:#fff; border:1px solid var(--ink-faint); }
table.users-table th{ text-align:left; font-family:'IBM Plex Mono', monospace; font-size:11px; letter-spacing:0.05em; text-transform:uppercase; color:var(--ink-soft); padding:12px 16px; border-bottom:1px solid var(--ink-faint); background:var(--paper-dim); }
table.users-table td{ padding:14px 16px; font-size:13.5px; border-bottom:1px solid var(--ink-faint); vertical-align:middle; }
table.users-table tr:last-child td{ border-bottom:none; }
table.users-table a.wa-link{ color:var(--blueprint); text-decoration:none; }
table.users-table a.wa-link:hover{ text-decoration:underline; }

.badge{ display:inline-flex; align-items:center; gap:6px; padding:4px 10px; border-radius:20px; font-family:'IBM Plex Mono', monospace; font-size:11px; text-transform:uppercase; letter-spacing:0.03em; }
.badge::before{ content:""; width:6px; height:6px; border-radius:50%; }
.badge.pending{ background:rgba(168,121,46,0.12); color:var(--pending); }
.badge.pending::before{ background:var(--pending); }
.badge.active{ background:rgba(79,122,91,0.12); color:var(--success); }
.badge.active::before{ background:var(--success); }
.badge.disabled{ background:rgba(163,75,61,0.12); color:var(--danger); }
.badge.disabled::before{ background:var(--danger); }
.row-actions{ display:flex; gap:8px; }
.empty-note{ padding:40px; text-align:center; color:var(--ink-soft); font-size:14px; }

/* ---------- ANIMACIONES ---------- */
table.users-table tbody tr{ transition:background .15s ease; }
table.users-table tbody tr:hover{ background:var(--paper-dim); }
.filter-tab{ transition:background .15s ease, color .15s ease, border-color .15s ease; }
.badge.pending::before{ animation:pulseDot 1.8s ease-in-out infinite; }
@keyframes pulseDot{ 0%,100%{ opacity:1; } 50%{ opacity:0.35; } }

[data-reveal]{
  opacity:0;
  transform:translateY(18px);
  transition:opacity .6s ease, transform .6s ease;
}
[data-reveal].in-view{ opacity:1; transform:translateY(0); }
[data-reveal-delay="1"]{ transition-delay:.08s; }
[data-reveal-delay="2"]{ transition-delay:.16s; }
[data-reveal-delay="3"]{ transition-delay:.24s; }

@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{
    animation-duration:0.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:0.01ms !important;
    scroll-behavior:auto !important;
  }
  [data-reveal]{ opacity:1; transform:none; }
}

@media (max-width: 860px){
  .hero-grid{ grid-template-columns:1fr; }
  h1.display{ font-size:36px; }
  .pillar-row{ grid-template-columns:1fr; }
  .stat-row{ grid-template-columns:1fr; }
  .closing-box{ flex-direction:column; align-items:flex-start; }
  table.users-table{ display:block; overflow-x:auto; -webkit-overflow-scrolling:touch; }
  .admin-toolbar{ flex-direction:column; align-items:stretch; }
  .search-field{ max-width:none; }
}

/* Telefonos (Android/iOS) en vertical */
@media (max-width: 640px){
  .wrap{ padding:0 18px; }
  nav.topbar{ padding:14px 18px; }
  .navlinks{ gap:8px; }
  .navlinks a.navlink{ display:none; }
  .brand-tagline{ display:none; }
  .appbar{ flex-wrap:wrap; gap:10px; padding:14px 18px; }
  .appbar .who{ display:none; }
  .appbar-actions{ gap:8px; flex-wrap:wrap; }
  main.app-main{ padding:36px 18px; }
  .admin-wrap{ padding:28px 18px 60px; }
}

/* Telefonos angostos */
@media (max-width: 480px){
  header.hero{ padding:44px 0 52px; }
  h1.display{ font-size:28px; }
  p.lede{ font-size:15px; }
  .eyebrow{ font-size:11px; }
  .hero-cta{ flex-direction:column; align-items:stretch; }
  .hero-cta .btn{ width:100%; }
  .cut-diagram{ padding:14px; }
  .pillars-head h2{ font-size:24px; }
  .pillar{ padding:26px 22px; }
  .closing-box{ padding:32px 24px; }
  .closing-box h2{ font-size:22px; }
  .closing-box .btn{ width:100%; }
  .auth-card{ padding:32px 22px; }
  .field input, .search-field input{ font-size:16px; } /* evita zoom automatico en Android/iOS */
  .admin-head h1{ font-size:24px; }
  .stat .n{ font-size:22px; }
  table.users-table th, table.users-table td{ padding:10px 12px; font-size:12.5px; }
  .brand-name{ font-size:16px; }
}

/* ================================================================
   NOVA LOADER — animación de entrada tras activación de cuenta
   ================================================================ */
#nova-loader{
  position:fixed; inset:0; z-index:200;
  background:
    radial-gradient(ellipse 70% 60% at 50% 42%, rgba(61,125,255,0.16), transparent 70%),
    var(--nova-deep);
  display:flex; align-items:center; justify-content:center;
  overflow:hidden;
  transition:opacity .7s ease, visibility .7s ease;
}
#nova-loader.nova-hide{ opacity:0; visibility:hidden; pointer-events:none; }

.nova-stage{ position:relative; width:220px; height:220px; display:flex; align-items:center; justify-content:center; }

.nova-ring{
  position:absolute; border-radius:50%;
  border:1px solid rgba(61,125,255,0.35);
  animation:novaRingExpand 3.2s ease-out infinite;
}
.nova-ring.r1{ width:60px; height:60px; animation-delay:0s; }
.nova-ring.r2{ width:60px; height:60px; animation-delay:0.8s; }
.nova-ring.r3{ width:60px; height:60px; animation-delay:1.6s; }
.nova-ring.r4{ width:60px; height:60px; animation-delay:2.4s; }
@keyframes novaRingExpand{
  0%{ transform:scale(1); opacity:0.9; border-color:rgba(124,108,255,0.7); }
  100%{ transform:scale(3.6); opacity:0; border-color:rgba(61,125,255,0); }
}

.nova-core{
  position:relative; width:56px; height:56px; border-radius:50%;
  background:radial-gradient(circle at 35% 35%, #fff, var(--nova) 45%, var(--nova-violet) 100%);
  box-shadow:0 0 30px 6px rgba(61,125,255,0.7), 0 0 70px 20px rgba(61,125,255,0.35);
  animation:novaCorePulse 2.1s ease-in-out infinite;
}
@keyframes novaCorePulse{
  0%,100%{ transform:scale(1); }
  50%{ transform:scale(1.14); }
}

.nova-particle{
  position:absolute; width:3px; height:3px; border-radius:50%;
  background:#bcd3ff; box-shadow:0 0 6px 1px rgba(188,211,255,0.8);
  animation:novaParticleDrift 4.5s ease-in-out infinite;
}
@keyframes novaParticleDrift{
  0%,100%{ transform:translate(0,0); opacity:0; }
  15%{ opacity:1; }
  50%{ transform:translate(var(--px,60px), var(--py,-40px)); opacity:0.9; }
  85%{ opacity:0; }
}

.nova-copy{ position:absolute; bottom:-104px; left:50%; transform:translateX(-50%); width:280px; text-align:center; }
.nova-title{
  font-family:'Newsreader', serif; font-weight:600; color:#fff; font-size:26px;
  letter-spacing:0.04em; margin-bottom:4px;
}
.nova-sub{
  font-family:'IBM Plex Mono', monospace; font-size:11px; letter-spacing:0.18em; text-transform:uppercase;
  color:var(--nova); margin-bottom:22px;
}

.nova-bar-track{ width:220px; height:2px; background:rgba(255,255,255,0.12); border-radius:2px; overflow:hidden; margin:0 auto 10px; }
.nova-bar-fill{ height:100%; width:0%; background:linear-gradient(90deg, var(--nova), var(--nova-violet)); box-shadow:0 0 10px rgba(61,125,255,0.8); }
.nova-percent{ font-family:'IBM Plex Mono', monospace; font-size:12px; color:rgba(255,255,255,0.55); letter-spacing:0.08em; }

@media (prefers-reduced-motion: reduce){
  #nova-loader{ transition:none; }
  .nova-ring, .nova-core, .nova-particle{ animation:none; }
}

/* ================================================================
   DASHBOARD — "¿Qué vamos a hacer hoy?"
   ================================================================ */
.dash-hidden{ opacity:0; visibility:hidden; }

.dash-main{ padding:40px 28px 64px; max-width:640px; margin:0 auto; }
.dash-head{ margin-bottom:24px; }
.dash-head h1{ font-size:26px; }

.tool-list{
  border:1px solid var(--ink-faint);
  border-radius:12px;
  background:#fff;
  overflow:hidden;
}

.tool-row{
  position:relative;
  display:flex; align-items:center; gap:14px;
  padding:16px 18px;
  text-decoration:none; color:var(--ink);
  border-bottom:1px solid var(--ink-faint);
  transition:background .15s ease;
}
.tool-list .tool-row:last-child{ border-bottom:none; }
.tool-row:not(.disabled):hover{ background:var(--paper-dim); }

.tool-row-icon{
  flex:none; width:36px; height:36px; border-radius:9px;
  display:flex; align-items:center; justify-content:center;
  background:var(--nova); color:#fff;
  font-family:'IBM Plex Mono', monospace; font-size:14px;
}
.tool-row-text{ flex:1; min-width:0; }
.tool-row-title{ font-family:'Newsreader', serif; font-weight:600; font-size:15.5px; line-height:1.25; }
.tool-row-sub{ font-size:12px; color:var(--ink-soft); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.tool-row-arrow{ flex:none; color:var(--ink-faint); transition:transform .15s ease, color .15s ease; }
.tool-row:hover .tool-row-arrow{ transform:translateX(3px); color:var(--nova); }

.tool-row.disabled{ cursor:not-allowed; }
.tool-row.disabled .tool-row-icon{ background:var(--ink-faint); color:var(--ink-soft); }
.tool-row.disabled .tool-row-title{ color:var(--ink-soft); }
.tool-row-badge{
  flex:none;
  font-family:'IBM Plex Mono', monospace; font-size:9.5px; letter-spacing:0.05em; text-transform:uppercase;
  padding:4px 9px; border-radius:20px; background:var(--paper-dim); color:var(--pending);
  border:1px solid var(--ink-faint);
}

@media (max-width: 640px){
  .dash-main{ padding:28px 18px 48px; }
  .dash-head h1{ font-size:22px; }
  .tool-row{ padding:14px 16px; }
}

/* Entrada propia del dashboard (se dispara al ocultar el loader en app.html, no por scroll).
   Restringido a #dash-shell para que NO afecte otras páginas (ej. Modulación Master)
   que reutilizan estas mismas clases pero no tienen el loader/animación. */
#dash-shell .dash-head, #dash-shell .tool-list{ opacity:0; transform:translateY(14px); }
#dash-shell.dash-animate .dash-head{
  animation:dashFadeIn .6s cubic-bezier(0.16,1,0.3,1) forwards;
}
#dash-shell.dash-animate .tool-list{
  animation:dashFadeIn .6s cubic-bezier(0.16,1,0.3,1) forwards;
  animation-delay:.08s;
}
@keyframes dashFadeIn{
  from{ opacity:0; transform:translateY(14px); }
  to{ opacity:1; transform:translateY(0); }
}
@media (prefers-reduced-motion: reduce){
  #dash-shell .dash-head, #dash-shell .tool-list{ opacity:1; transform:none; animation:none; }
}

/* ================================================================
   MODULACIÓN MASTER — aviso y navegación de vuelta
   ================================================================ */
.mm-notice{
  display:flex; gap:12px; align-items:flex-start;
  background:rgba(53,80,107,0.06); border:1px solid rgba(53,80,107,0.2);
  border-radius:10px; padding:16px 18px; margin-bottom:28px;
}
.mm-notice svg{ flex:none; color:var(--blueprint); margin-top:2px; }
.mm-notice p{ font-size:13.5px; line-height:1.55; color:var(--ink); margin:0; }

.mm-back{
  display:inline-flex; align-items:center; gap:6px;
  margin-top:24px; font-size:13px; color:var(--ink-soft); text-decoration:none;
}
.mm-back:hover{ color:var(--ink); }
