/* ============================================================================
   APP CSS — cascada por capas (MANIFIESTO §3): base → layout → components → utils
   Solo consume tokens de tokens.css. Cero literales de color/espacio.
   ========================================================================== */
@layer base, layout, components, utilities;

/* ---------------------------------------------------------------- BASE ---- */
@layer base {
  *, *::before, *::after { box-sizing: border-box; }
  html, body { height: 100%; }
  body {
    margin: 0;
    font-family: var(--font-sans);
    font-size: var(--text-md);
    line-height: var(--leading-normal);
    color: var(--color-text);
    background: var(--color-bg);
    -webkit-font-smoothing: antialiased;
  }
  h1, h2, h3, p { margin: 0; }
  a { color: inherit; text-decoration: none; }
  button, input, textarea, select { font: inherit; color: inherit; }

  :focus-visible {
    outline: 2px solid var(--color-focus-ring);
    outline-offset: 2px;
    border-radius: var(--radius-sm);
  }

  ::-webkit-scrollbar { width: 10px; height: 10px; }
  ::-webkit-scrollbar-thumb {
    background: var(--color-surface-2);
    border-radius: var(--radius-full);
  }
}

/* -------------------------------------------------------------- LAYOUT ---- */
@layer layout {
  .app-shell {
    display: grid;
    grid-template-columns: var(--sidebar-w) 1fr;
    height: 100vh;
  }

  .sidebar {
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
    padding: var(--space-5) var(--space-4);
    background: var(--color-surface);
    border-right: 1px solid var(--color-border-soft);
  }
  .sidebar-foot { margin-top: auto; display: grid; gap: var(--space-3); }
  .sidebar-top { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); }

  /* ---- Menú plegable (rail de iconos) ---- */
  .app-shell.collapsed { grid-template-columns: 72px 1fr; }
  .app-shell.collapsed .brand-name,
  .app-shell.collapsed .nav-item > span,
  .app-shell.collapsed #btn-add > span,
  .app-shell.collapsed .user-name,
  .app-shell.collapsed .user-row .link { display: none; }
  .app-shell.collapsed .nav-item,
  .app-shell.collapsed .user-row,
  .app-shell.collapsed #btn-add { justify-content: center; }
  .app-shell.collapsed .sidebar-top { justify-content: center; }
  .app-shell.collapsed .sidebar { padding-left: var(--space-2); padding-right: var(--space-2); }

  .main { overflow: hidden; display: flex; flex-direction: column; }
  .view { flex: 1; overflow: auto; padding: var(--space-6); }

  .view-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: var(--space-5);
    gap: var(--space-4);
  }

  .stack { display: grid; gap: var(--space-4); }
  .row   { display: flex; gap: var(--space-3); align-items: center; }
  .grid-cards {
    display: grid;
    gap: var(--space-4);
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  }

  @media (max-width: 760px) {
    .app-shell { grid-template-columns: 1fr; }
    .sidebar {
      flex-direction: row; flex-wrap: wrap; align-items: center;
      border-right: 0; border-bottom: 1px solid var(--color-border-soft);
    }
    .sidebar-foot { margin: 0; }
    .nav { display: flex; gap: var(--space-2); }
  }
}

/* ----------------------------------------------------------- COMPONENTS --- */
@layer components {

  /* Marca / nav */
  .brand { display: flex; align-items: center; gap: var(--space-2); font-weight: var(--font-bold); font-size: var(--text-lg); }
  .brand-logo { font-size: var(--text-xl); }
  .nav { display: grid; gap: var(--space-1); }
  .nav-item {
    display: flex; align-items: center; gap: var(--space-3);
    padding: var(--space-2) var(--space-3);
    border-radius: var(--radius-md);
    color: var(--color-text-muted);
    transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
  }
  .nav-item:hover { background: var(--color-surface-2); color: var(--color-text); }
  .nav-item.active { background: var(--color-primary); color: var(--color-on-primary); }

  .nav-toggle { font-size: var(--text-lg); line-height: 1; padding: var(--space-1) var(--space-2); border-radius: var(--radius-md); }
  .nav-toggle:hover { background: var(--color-surface-2); }

  .user-row { display: flex; align-items: center; justify-content: space-between; font-size: var(--text-sm); }
  .link { color: var(--color-primary-hover); }
  .muted { color: var(--color-text-muted); }

  /* Botones */
  .btn {
    display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2);
    padding: var(--space-2) var(--space-4);
    border: 1px solid transparent;
    border-radius: var(--radius-md);
    background: var(--color-surface-2);
    cursor: pointer;
    font-weight: var(--font-medium);
    transition: background var(--dur-fast) var(--ease), transform var(--dur-fast) var(--ease);
  }
  .btn:hover { background: var(--color-surface-hover); }
  .btn:active { transform: translateY(1px); }
  .btn-primary { background: var(--color-primary); color: var(--color-on-primary); }
  .btn-primary:hover { background: var(--color-primary-hover); }
  .btn-danger { background: var(--color-danger); color: var(--color-on-primary); }
  .btn-danger:hover { background: var(--color-danger-hover); }
  .btn-ghost { background: transparent; border-color: var(--color-border); }
  .btn-ghost:hover { background: var(--color-surface-2); }
  .btn-block { width: 100%; }
  .btn-sm { padding: var(--space-1) var(--space-2); font-size: var(--text-sm); }

  /* Campos de formulario */
  .field { display: grid; gap: var(--space-2); font-size: var(--text-sm); }
  .field > span { color: var(--color-text-muted); }
  .field input, .field textarea, .field select {
    padding: var(--space-2) var(--space-3);
    background: var(--color-bg);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    width: 100%;
  }
  .field textarea { resize: vertical; min-height: 90px; }
  .field-check { display: flex; align-items: center; gap: var(--space-2); }
  .field-check input { width: auto; }

  /* Tarjetas */
  .card {
    background: var(--color-surface);
    border: 1px solid var(--color-border-soft);
    border-radius: var(--radius-lg);
    padding: var(--space-4);
    box-shadow: var(--shadow-sm);
  }
  .card-title { font-weight: var(--font-semibold); margin-bottom: var(--space-1); }
  .stat-num { font-size: var(--text-2xl); font-weight: var(--font-bold); }

  /* Chips de tipo de nodo */
  .chip {
    display: inline-flex; align-items: center; gap: var(--space-1);
    padding: var(--space-1) var(--space-2);
    border-radius: var(--radius-full);
    font-size: var(--text-xs);
    font-weight: var(--font-medium);
    color: var(--color-on-primary);
  }

  /* Barras del panel de actividad */
  .bars { display: grid; gap: var(--space-2); }
  .bar-row { display: grid; grid-template-columns: 96px 1fr 40px; gap: var(--space-3); align-items: center; }
  .bars-compact .bar-row { grid-template-columns: 44px 1fr 34px; }
  .bar-label { color: var(--color-text-muted); font-size: var(--text-sm); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .bar-track { background: var(--color-surface-2); border-radius: var(--radius-full); height: 14px; overflow: hidden; }
  .bar-fill { display: block; height: 100%; background: var(--color-primary); border-radius: var(--radius-full); min-width: 2px; }
  .bar-val { text-align: right; color: var(--color-text-muted); font-size: var(--text-sm); }

  /* Badge de estado (consume color del token --badge inyectado en línea) */
  .badge {
    display: inline-flex; align-items: center;
    padding: var(--space-1) var(--space-2);
    border-radius: var(--radius-full);
    font-size: var(--text-xs); font-weight: var(--font-medium);
    color: var(--badge, var(--color-text-muted));
    border: 1px solid var(--badge, var(--color-border));
    background: color-mix(in srgb, var(--badge, var(--color-surface-2)) 14%, transparent);
  }

  /* Pills (participantes, relacionados) */
  .pill {
    display: inline-flex; align-items: center; gap: var(--space-1);
    padding: var(--space-1) var(--space-3);
    border-radius: var(--radius-full);
    background: var(--color-surface-2);
    border: 1px solid var(--color-border-soft);
    font-size: var(--text-sm);
  }
  .pill-x {
    border: 0; background: transparent; cursor: pointer;
    color: var(--color-text-muted); font-size: var(--text-xs); padding: 0;
  }
  .pill-x:hover { color: var(--color-danger); }

  /* Timeline / bitácora de avances */
  .timeline { display: grid; gap: var(--space-4); padding-left: var(--space-3); }
  .timeline-item {
    position: relative; display: grid; grid-template-columns: auto 1fr; gap: var(--space-3);
    padding-left: var(--space-4);
    border-left: 2px solid var(--color-border);
  }
  .timeline-item:last-child { border-left-color: transparent; }
  .timeline-dot {
    position: absolute; left: calc(var(--space-1) * -1); top: var(--space-1);
    width: 12px; height: 12px; border-radius: var(--radius-full);
    background: var(--node-update, var(--color-success));
    border: 2px solid var(--color-surface);
  }
  .timeline-body {
    grid-column: 2;
    background: var(--color-surface-2);
    border: 1px solid var(--color-border-soft);
    border-radius: var(--radius-md);
    padding: var(--space-3);
  }

  /* Tabla agenda */
  .table { width: 100%; border-collapse: collapse; }
  .table th, .table td {
    text-align: left; padding: var(--space-3);
    border-bottom: 1px solid var(--color-border-soft);
  }
  .table th { color: var(--color-text-muted); font-size: var(--text-sm); font-weight: var(--font-medium); }
  .table tr:hover td { background: var(--color-surface-2); }

  /* Alertas */
  .alert { padding: var(--space-3) var(--space-4); border-radius: var(--radius-md); font-size: var(--text-sm); }
  .alert-error { background: color-mix(in srgb, var(--color-danger) 18%, transparent); color: var(--color-danger-hover); }

  /* Empty states */
  .empty {
    display: grid; place-items: center; gap: var(--space-3);
    padding: var(--space-8); text-align: center; color: var(--color-text-muted);
  }
  .empty-emoji { font-size: var(--text-2xl); }

  /* Grafo */
  #graph-canvas { width: 100%; height: 100%; min-height: 420px; }
  .graph-wrap { display: grid; grid-template-columns: 1fr; height: calc(100vh - 160px); }
  .graph-canvas-box {
    background: var(--color-surface);
    border: 1px solid var(--color-border-soft);
    border-radius: var(--radius-lg);
    overflow: hidden;
  }

  /* Modal */
  .modal-backdrop {
    position: fixed; inset: 0; z-index: var(--z-modal);
    background: rgba(0,0,0,.55);
    display: grid; place-items: center; padding: var(--space-4);
  }
  .modal {
    width: min(560px, 100%);
    max-height: 90vh; overflow: auto;
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-lg);
    padding: var(--space-5);
  }
  .modal-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--space-4); }
  .modal-title { font-size: var(--text-lg); font-weight: var(--font-semibold); }
  .modal-actions { display: flex; justify-content: flex-end; gap: var(--space-3); margin-top: var(--space-5); }
  .icon-btn { background: transparent; border: 0; cursor: pointer; font-size: var(--text-lg); color: var(--color-text-muted); }

  /* Toast */
  .toast-root {
    position: fixed; right: var(--space-5); bottom: var(--space-5);
    z-index: var(--z-toast); display: grid; gap: var(--space-2);
  }
  .toast {
    padding: var(--space-3) var(--space-4);
    background: var(--color-surface-2);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-md);
    animation: toast-in var(--dur-base) var(--ease);
  }
  .toast-success { border-left: 3px solid var(--color-success); }
  .toast-error   { border-left: 3px solid var(--color-danger); }
  @keyframes toast-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }

  /* Auth */
  .auth-body { display: grid; place-items: center; min-height: 100vh; padding: var(--space-4); }
  .auth-card {
    width: min(380px, 100%);
    background: var(--color-surface);
    border: 1px solid var(--color-border-soft);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-lg);
    padding: var(--space-6);
    display: grid; gap: var(--space-5);
  }
  .auth-brand { text-align: center; display: grid; gap: var(--space-1); }
  .auth-logo { font-size: var(--text-2xl); }
}

/* ----------------------------------------------------------- UTILITIES --- */
@layer utilities {
  .hidden { display: none !important; }
  .text-sm { font-size: var(--text-sm); }
  .text-muted { color: var(--color-text-muted); }
  .mt-2 { margin-top: var(--space-2); }
  .mt-4 { margin-top: var(--space-4); }
  .gap-2 { gap: var(--space-2); }
  .grow { flex: 1; }
  .right { margin-left: auto; }
}
