/* =========================================================
   La Cajita Mágica de N3 — styles.css (FULL)
   ---------------------------------------------------------
   Este archivo define:
   1) Variables de tema (colores, radios)
   2) Layout base (container, header, cards)
   3) Controles (inputs, selects, botones)
   4) (Legacy) Grid/Detail de tools.json (si lo sigues usando)
   5) Modal Glacier (responsive + scroll correcto)
   6) Bloque URLs (con scroll interno y URLs largas “wrap”)
   7) Layout 2 columnas (Glacier + ZIP lado a lado)
   8) Estilos específicos del ZIP (textarea, status colores)
   ========================================================= */

/* =========================
   1) THEME / VARIABLES
   ========================= */
   :root{
    --bg:#0b1020;
    --card:#121a33;
    --text:#e9ecf1;
    --muted:#a9b1c7;
    --line:#263158;
    --btn:#2a3a76;
    --btn2:#1a2447;
    --radius:16px;
  
    /* (Opcional) colores semánticos para status */
    --ok:#6ee7b7;
    --warn:#fbbf24;
    --err:#f87171;
  
    /* link color */
    --link:#3b82f6;
  }
  
  /* =========================
     2) BASE / LAYOUT
     ========================= */
  *{ box-sizing:border-box; }
  
  body{
    margin:0;
    font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, "Apple Color Emoji","Segoe UI Emoji";
    background: radial-gradient(1200px 600px at 10% 0%, #14204a 0%, var(--bg) 55%);
    color:var(--text);
  }
  
  .container{
    max-width:1100px;
    margin:0 auto;
    padding:20px;
  }
  
  .header{
    border-bottom:1px solid var(--line);
    background:rgba(0,0,0,.15);
    backdrop-filter: blur(6px);
  }
  
  .header__row{
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:16px;
  }
  
  h1{ margin:0; font-size:28px; }
  p{ margin:6px 0 0; }
  
  .muted{ color:var(--muted); }
  
  .card{
    background: linear-gradient(180deg, rgba(255,255,255,.03), rgba(255,255,255,.01));
    border:1px solid var(--line);
    border-radius: var(--radius);
    padding:16px;
  }
  
  /* =========================
     3) CONTROLES (INPUTS/BOTONES)
     ========================= */
  .controls{ margin:18px 0; }
  
  .controls__row{
    display:flex;
    gap:12px;
    flex-wrap:wrap;
    align-items:center;
  }
  
  .controls__row--secondary{
    justify-content:space-between;
    margin-top:10px;
  }
  
  .input, .select{
    width:min(520px,100%);
    padding:12px 12px;
    border-radius:12px;
    border:1px solid var(--line);
    background:rgba(0,0,0,.2);
    color:var(--text);
    outline:none;
  }
  
  /* select no necesita width enorme */
  .select{
    width:auto;
    min-width:180px;
  }
  
  .btn{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    padding:10px 12px;
    border-radius:12px;
    border:1px solid var(--line);
    background: var(--btn);
    color:var(--text);
    text-decoration:none;
    cursor:pointer;
  }
  
  .btn:hover{ filter:brightness(1.08); }
  
  .btn--ghost{ background: var(--btn2); }
  
  /* estado disabled general */
  button:disabled,
  .btn:disabled{
    opacity: 0.45;
    cursor: not-allowed;
    pointer-events: none;
  }
  
  /* (Usado para destacar tier recomendado en el modal) */
  .btn--primary{
    outline: 2px solid rgba(255,255,255,0.35);
    box-shadow: 0 0 0 6px rgba(100,160,255,0.12);
  }
  
  /* =========================
     4) LEGACY (GRID / DETAIL tools.json)
     - Si ya no usas tools.json, puedes ignorar esta sección.
     ========================= */
  .grid{
    display:grid;
    grid-template-columns: repeat(3, 1fr);
    gap:14px;
    margin-bottom:30px;
  }
  @media (max-width: 980px){ .grid{ grid-template-columns: repeat(2, 1fr); } }
  @media (max-width: 640px){ .grid{ grid-template-columns: 1fr; } }
  
  .tool{
    padding:16px;
    border-radius: var(--radius);
    border:1px solid var(--line);
    background: rgba(255,255,255,.02);
    transition: transform .12s ease;
  }
  .tool:hover{ transform: translateY(-2px); }
  .tool h3{ margin:0 0 8px; }
  
  .badges{
    display:flex;
    flex-wrap:wrap;
    gap:8px;
    margin-top:10px;
  }
  
  .badge{
    font-size:12px;
    padding:4px 8px;
    border:1px solid var(--line);
    border-radius:999px;
    color:var(--muted);
    background:rgba(0,0,0,.16);
  }
  
  .meta{
    display:flex;
    gap:10px;
    flex-wrap:wrap;
    margin-top:10px;
  }
  
  .sep{
    border:none;
    border-top:1px solid var(--line);
    margin:16px 0;
  }
  
  .detail{ margin-top:18px; }
  .hidden{ display:none; }
  
  .detail__header{ margin-bottom:12px; }
  
  .detail__top{
    display:flex;
    justify-content:space-between;
    gap:16px;
    flex-wrap:wrap;
  }
  
  .detail__actions{ display:flex; gap:10px; }
  
  .detail__cols{
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:14px;
  }
  @media (max-width: 800px){
    .detail__cols{ grid-template-columns:1fr; }
  }
  
  .list{ margin:10px 0 0; padding-left:18px; }
  
  .codebox{
    border:1px solid var(--line);
    border-radius:14px;
    background: rgba(0,0,0,.25);
    padding:12px;
    overflow:auto;
  }
  .codebox pre{ margin:0; }
  
  .codebox__actions{ margin-top:10px; }
  
  .footer{
    border-top:1px solid var(--line);
    padding:14px 0;
    background:rgba(0,0,0,.12);
  }
  
  code{ color:#cbd5ff; }
  
  /* =========================
     5) LINKS (GLOBAL)
     - Esto controla el color de TODOS los <a>
     ========================= */
  a{
    color: var(--link);
    text-decoration: none;
  }
  a:hover{
    text-decoration: underline;
  }
  
  /* =========================
     6) MODAL (GLACIER)
     - Responsive: el panel se adapta a la pantalla
     - Scroll: el body NO scrollea completo; el scroll está en #urlsContainer
     ========================= */
  .modal.hidden { display:none; }
  .modal { position: fixed; inset: 0; z-index: 9999; }
  
  .modal__backdrop{
    position:absolute; inset:0;
    background: rgba(0,0,0,0.55);
    backdrop-filter: blur(4px);
  }
  
  .modal__panel{
    position: relative;
  
    /* Responsive width + max-height (para pantallas chicas) */
    width: min(720px, calc(100vw - 24px));
    max-height: calc(100vh - 24px);
  
    /* Centrado */
    margin: 7vh auto;
  
    border-radius: 18px;
    border: 1px solid rgba(255,255,255,0.10);
    background: rgba(16,22,40,0.92);
    box-shadow: 0 20px 80px rgba(0,0,0,0.55);
  
    overflow: hidden;
  
    /* Para poder fijar header arriba y controlar scroll */
    display:flex;
    flex-direction:column;
  }
  
  .modal__header{
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:16px 18px;
    border-bottom: 1px solid rgba(255,255,255,0.08);
  
    /* Header “sticky” cuando hay scroll (se queda arriba) */
    position: sticky;
    top: 0;
    z-index: 2;
    background: inherit;
  }
  
  .modal__body{
    padding: 16px 18px 18px;
  
    /* Importante:
       Dejamos el body SIN scroll para que el scroll
       sea SOLO del bloque de URLs (#urlsContainer). */
    overflow: hidden;
  }
  
  .iconbtn{
    background: transparent;
    border: 1px solid rgba(255,255,255,0.12);
    color: inherit;
    border-radius: 10px;
    padding: 6px 10px;
    cursor: pointer;
  }
  .iconbtn:hover{ border-color: rgba(255,255,255,0.22); }
  
  /* Tabla de costos */
  .table{
    margin-top: 12px;
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 14px;
    overflow: hidden;
  }
  
  .table__row{
    display:grid;
    grid-template-columns: 1.2fr 0.8fr 0.6fr;
    gap: 12px;
    padding: 12px 14px;
    border-top: 1px solid rgba(255,255,255,0.08);
    align-items:center;
  }
  
  .table__head{
    border-top:none;
    background: rgba(255,255,255,0.04);
    font-weight:600;
    color: rgba(255,255,255,0.85);
  }
  
  /* Mobile: tabla apilada */
  @media (max-width: 520px){
    .table__row{
      grid-template-columns: 1fr;
      gap: 6px;
    }
  }
  
  /* Callout explicativo del modal */
  .callout{
    margin-top:14px;
    padding:12px 14px;
    border-radius:14px;
    border: 1px solid rgba(255,255,255,0.10);
    background: rgba(255,255,255,0.04);
  }
  
  /* Skeleton loading */
  .loading{ opacity:0.75; }
  
  .skeleton{
    display:inline-block;
    min-width:90px;
    height:16px;
    border-radius:10px;
    background: rgba(255,255,255,0.10);
    position:relative;
    overflow:hidden;
  }
  
  .skeleton::after{
    content:"";
    position:absolute;
    inset:0;
    transform: translateX(-100%);
    background: linear-gradient(
      90deg,
      rgba(255,255,255,0.02),
      rgba(255,255,255,0.12),
      rgba(255,255,255,0.02)
    );
    animation: shimmer 1.1s infinite;
  }
  
  @keyframes shimmer{
    100%{ transform: translateX(100%); }
  }
  
  /* Botones del modal: copiar/descargar URLs */
  .urls-actions{
    display:flex;
    gap:10px;
    margin-top:10px;
  }
  
  /* Mobile: botones en columna */
  @media (max-width: 520px){
    .urls-actions{
      flex-direction: column;
      gap: 8px;
    }
  }
  
  /* =========================
     7) BLOQUE DE URLS (MODAL)
     - Scroll interno aquí
     - Evita que URLs largas rompan el layout
     ========================= */
  .urls-container{
    margin-top:12px;
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 14px;
    padding: 12px;
    background: rgba(255,255,255,0.03);
  }
  
  /* El contenedor real en HTML es #urlsContainer */
  #urlsContainer{
    /* max-height: limita el alto del bloque para que no “se coma” el modal */
    max-height: min(320px, calc(100vh - 420px));
    overflow: auto;
    padding-right: 6px; /* deja espacio para scrollbar */
    border-radius: 12px;
  }
  
  /* Ajuste en mobile: menos alto para que se vea el resto del modal */
  @media (max-width: 520px){
    #urlsContainer{
      max-height: min(260px, calc(100vh - 380px));
    }
  }
  
  .urls-container details{
    border-top: 1px solid rgba(255,255,255,0.08);
    padding: 10px 0;
  }
  .urls-container details:first-child{
    border-top:none;
    padding-top:0;
  }
  
  .urls-container summary{
    cursor:pointer;
    font-weight:600;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:12px;
  }
  
  .urls-container summary .count{
    font-weight:500;
    opacity:0.75;
    font-size: 0.9em;
  }
  
  .url-list{
    margin: 8px 0 0 18px;
    padding: 0;
  }
  
  .url-list li{
    margin-bottom: 6px;
  
    /* Muy importante: URLs largas no rompen el layout */
    word-break: break-all;
    overflow-wrap: anywhere;
  }
  
  #urlsContainer a{
    text-decoration: none; /* base */
  }
  #urlsContainer a:hover{
    text-decoration: underline;
  }
  
  /* =========================
     8) TWO-COL LAYOUT (GLACIER + ZIP)
     - Desktop: 2 columnas
     - Mobile: 1 columna
     ========================= */
  .two-col{
    display:grid;
    grid-template-columns: 1fr 1fr; /* 2 columnas iguales */
    gap: 18px;                      /* espacio entre cards */
    margin: 18px 0;                 /* separación vertical */
  }
  
  @media (max-width: 900px){
    .two-col{
      grid-template-columns: 1fr;
    }
  }
  
  /* =========================
     9) ZIP SECTION (UI)
     - Ajustes visuales del textarea, input file y status
     ========================= */
  
  /* Textarea: cómodo y con resize */
  #zipUrls{
    min-height: 160px;
    resize: vertical;
  }
  
  /* Input file: que no se estire raro */
  #zipFile{
    width: auto;
    padding: 8px;
  }
  
  /* Status del ZIP (texto debajo) */
  #zipStatus{
    margin-top: 8px;
    font-size: 0.95rem;
  }
  
  /* Si en JS le pones className = "muted success" */
  #zipStatus.success{ color: var(--ok); }
  
  /* Si en JS le pones className = "muted warning" */
  #zipStatus.warning{ color: var(--warn); }
  
  /* Si en JS le pones className = "muted error" */
  #zipStatus.error{ color: var(--err); }