/* =============================================================================
   Medifit UI Kit
   =============================================================================
   El vocabulario de componentes de la app. Nació en la búsqueda de alimentos
   (food_recognition.html es la implementación de referencia) y se extrajo aquí
   para que todas las pantallas usen las mismas piezas.

   Principios, que son los que separan un componente pensado de uno improvisado:

   1. Neutros más UN acento. El naranja de Medifit se reserva para la acción
      principal y el estado seleccionado; todo lo demás es escala de grises.
   2. Bordes de 1px en lugar de sombras. La sombra sugiere elevación; casi nada
      en una app está elevado salvo las hojas y los diálogos.
   3. Radios de una sola familia: 10 para controles, 12 para tarjetas, 16 para
      hojas, 999 para píldoras. Nada de valores sueltos.
   4. Cada control tiene sus cuatro estados: reposo, pulsado, foco y desactivado.
      El foco se ve (anillo de 3px), porque hay usuarios con teclado.
   5. Objetivos táctiles de 44px. Si el elemento visible es menor, se extiende
      con un pseudo-elemento invisible.
   6. Cifras con `font-variant-numeric: tabular-nums` para que no bailen al
      actualizarse.

   Se carga DESPUÉS de shared/native.css y ANTES del <style> de la página:
     <link rel="stylesheet" href="shared/native.css?v=1">
     <link rel="stylesheet" href="shared/ui-kit.css?v=1">
   ============================================================================= */

:root {
  /* Superficie y texto */
  --ui-bg: #FFFFFF;
  --ui-subtle: #FAFAFA;
  --ui-muted-bg: #F4F4F5;
  --ui-fg: #18181B;
  --ui-fg-muted: #71717A;
  --ui-fg-subtle: #A1A1AA;
  --ui-border: #E4E4E7;
  --ui-border-strong: #D4D4D8;

  /* Acento único */
  --ui-accent: #E8571B;
  --ui-accent-press: #C8460F;
  --ui-accent-soft: #FEF1EA;
  --ui-ring: rgba(232, 87, 27, 0.30);

  /* Semánticos: informan de un estado, no son decoración */
  --ui-success: #15803D;
  --ui-success-soft: #ECFDF3;
  --ui-warning: #B45309;
  --ui-warning-soft: #FFF7ED;
  --ui-danger: #B42318;
  --ui-danger-soft: #FEF3F2;

  /* Macronutrientes: rampa cálida derivada de la marca.
     Nada de morados ni turquesas inventados: los cuatro tonos salen del naranja
     de Medifit y de su ámbar, más un neutro cálido para cerrar la serie. Se
     distinguen entre sí por intensidad, no por meter un color ajeno. */
  --ui-cal: #E8571B;   /* naranja de marca, la métrica principal */
  --ui-pro: #B03A0B;   /* naranja tostado */
  --ui-car: #F7931E;   /* ámbar, el segundo color del degradado de la app */
  --ui-fat: #78716C;   /* neutro cálido */

  /* Geometría */
  --ui-r-control: 10px;
  --ui-r-card: 12px;
  --ui-r-sheet: 16px;
  --ui-gap: 12px;
}

/* -----------------------------------------------------------------------------
   Tipografía auxiliar
   -------------------------------------------------------------------------- */
.ui-title    { color: var(--ui-fg); font-size: 17px; line-height: 22px; font-weight: 600; letter-spacing: -0.41px; }
.ui-subtitle { color: var(--ui-fg-muted); font-size: 13px; line-height: 18px; }
.ui-num      { font-variant-numeric: tabular-nums; }

/* Encabezado de sección: 12px, versalita, muteado. Nunca un h2 gigante. */
.ui-label {
  display: block;
  color: var(--ui-fg-muted);
  font-size: 12px;
  line-height: 16px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

/* -----------------------------------------------------------------------------
   Botones
   -------------------------------------------------------------------------- */
.ui-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 44px;
  padding: 0 18px;
  border: 1px solid transparent;
  border-radius: var(--ui-r-control);
  background: none;
  font-family: inherit;
  font-size: 15px;
  font-weight: 600;
  line-height: 20px;
  cursor: pointer;
  transition: background-color 0.15s ease, border-color 0.15s ease, opacity 0.15s ease;
}
a.ui-btn { text-decoration: none; }
.ui-btn:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--ui-ring); }
.ui-btn:disabled { opacity: 0.45; pointer-events: none; }
.ui-btn svg { width: 17px; height: 17px; flex: none; }
.ui-btn-block { display: flex; width: 100%; }
.ui-btn-lg { min-height: 48px; font-size: 16px; border-radius: 12px; }
.ui-btn-sm { min-height: 36px; padding: 0 12px; font-size: 14px; }

.ui-btn-primary { background: var(--ui-accent); color: #FFFFFF; }
.ui-btn-primary:active { background: var(--ui-accent-press); }

.ui-btn-secondary { background: var(--ui-bg); border-color: var(--ui-border); color: var(--ui-fg); }
.ui-btn-secondary:active { background: var(--ui-muted-bg); }

.ui-btn-ghost { color: var(--ui-fg-muted); }
.ui-btn-ghost:active { background: var(--ui-muted-bg); color: var(--ui-fg); }

.ui-btn-danger { background: var(--ui-danger); color: #FFFFFF; }
.ui-btn-danger:active { opacity: 0.85; }

/* -----------------------------------------------------------------------------
   Campos
   -------------------------------------------------------------------------- */
.ui-input,
.ui-select,
.ui-textarea {
  width: 100%;
  border: 1px solid var(--ui-border);
  border-radius: var(--ui-r-control);
  background: var(--ui-bg);
  color: var(--ui-fg);
  font-family: inherit;
  font-size: 16px;           /* por debajo de 16 iOS hace zoom al enfocar */
  line-height: 20px;
  outline: none;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
  -webkit-appearance: none;
  appearance: none;
}
.ui-input, .ui-select { height: 44px; padding: 0 12px; }
.ui-textarea { min-height: 96px; padding: 11px 12px; resize: vertical; }

.ui-input::placeholder, .ui-textarea::placeholder { color: var(--ui-fg-subtle); }

.ui-input:focus, .ui-select:focus, .ui-textarea:focus {
  border-color: var(--ui-accent);
  box-shadow: 0 0 0 3px var(--ui-ring);
}
.ui-input:disabled, .ui-select:disabled, .ui-textarea:disabled {
  background: var(--ui-muted-bg);
  color: var(--ui-fg-muted);
}
.ui-input[aria-invalid="true"], .ui-textarea[aria-invalid="true"] {
  border-color: var(--ui-danger);
}

/* Select con su propia flecha: la nativa varía demasiado entre plataformas */
.ui-select {
  padding-right: 34px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2371717A' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 11px center;
  background-size: 16px 16px;
}

/* Campo con icono a la izquierda (búsqueda y similares) */
.ui-field { position: relative; display: flex; align-items: center; }
.ui-field > svg:first-child {
  position: absolute;
  left: 11px;
  width: 16px;
  height: 16px;
  color: var(--ui-fg-muted);
  pointer-events: none;
}
.ui-field > .ui-input { padding-left: 35px; }

.ui-hint { margin-top: 6px; color: var(--ui-fg-muted); font-size: 12px; line-height: 16px; }
.ui-hint-error { color: var(--ui-danger); }

/* -----------------------------------------------------------------------------
   Píldoras y chips
   -------------------------------------------------------------------------- */
.ui-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 38px;
  padding: 9px 14px;
  border: 1px solid var(--ui-border);
  border-radius: 999px;
  background: var(--ui-bg);
  color: var(--ui-fg);
  font-family: inherit;
  font-size: 13px;
  line-height: 18px;
  cursor: pointer;
}
a.ui-chip { text-decoration: none; }
.ui-chip:active { background: var(--ui-muted-bg); }
.ui-chip:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--ui-ring); }
.ui-chip[aria-pressed="true"], .ui-chip.is-selected {
  border-color: var(--ui-accent);
  background: var(--ui-accent);
  color: #FFFFFF;
}

/* Etiqueta de estado. No es interactiva: informa. */
.ui-pill {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 3px 9px;
  border-radius: 999px;
  background: var(--ui-muted-bg);
  color: var(--ui-fg-muted);
  font-size: 12px;
  line-height: 16px;
  font-weight: 500;
}
.ui-pill-success { background: var(--ui-success-soft); color: var(--ui-success); }
.ui-pill-warning { background: var(--ui-warning-soft); color: var(--ui-warning); }
.ui-pill-danger  { background: var(--ui-danger-soft);  color: var(--ui-danger); }

/* -----------------------------------------------------------------------------
   Control segmentado (pestañas de dos o tres opciones)
   -------------------------------------------------------------------------- */
.ui-segment {
  display: flex;
  gap: 2px;
  padding: 3px;
  border-radius: var(--ui-r-control);
  background: var(--ui-muted-bg);
}
.ui-segment button {
  flex: 1 1 0;
  min-height: 36px;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--ui-fg-muted);
  font-family: inherit;
  font-size: 14px;
  font-weight: 500;
  cursor: pointer;
}
.ui-segment button[aria-selected="true"] {
  background: var(--ui-bg);
  color: var(--ui-fg);
  font-weight: 600;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
}

/* -----------------------------------------------------------------------------
   Tarjetas y listas
   -------------------------------------------------------------------------- */
.ui-card {
  display: block;
  border: 1px solid var(--ui-border);
  border-radius: var(--ui-r-card);
  background: var(--ui-bg);
  overflow: hidden;
  text-decoration: none;
  color: inherit;
}
.ui-card-pad { padding: 16px; }

.ui-list { border: 1px solid var(--ui-border); border-radius: var(--ui-r-card); background: var(--ui-bg); overflow: hidden; }

.ui-row {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  min-height: 56px;
  padding: 12px 14px;
  border: 0;
  background: var(--ui-bg);
  color: var(--ui-fg);
  font-family: inherit;
  font-size: 15px;
  line-height: 20px;
  text-align: left;
}
.ui-row + .ui-row { border-top: 1px solid var(--ui-border); }
button.ui-row, a.ui-row { cursor: pointer; }
a.ui-row { text-decoration: none; }
button.ui-row:active, a.ui-row:active { background: var(--ui-subtle); }

.ui-row-main { flex: 1 1 auto; min-width: 0; }
.ui-row-title { display: block; font-weight: 500; }
.ui-row-sub { display: block; margin-top: 1px; color: var(--ui-fg-muted); font-size: 12px; line-height: 16px; }
.ui-row-value { flex: none; color: var(--ui-fg-muted); font-variant-numeric: tabular-nums; }
.ui-row-icon {
  flex: none;
  width: 36px;
  height: 36px;
  display: grid;
  place-items: center;
  border-radius: 9px;
  background: var(--ui-muted-bg);
  color: var(--ui-fg-muted);
}
.ui-row-icon svg { width: 18px; height: 18px; }
.ui-chevron { flex: none; width: 16px; height: 16px; color: var(--ui-fg-subtle); }

/* -----------------------------------------------------------------------------
   Cifras
   -------------------------------------------------------------------------- */
.ui-stats {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: 1fr;
  gap: 1px;
  border: 1px solid var(--ui-border);
  border-radius: var(--ui-r-card);
  background: var(--ui-border);
  overflow: hidden;
}
.ui-stat { background: var(--ui-bg); padding: 12px 6px; text-align: center; }
.ui-stat-value { color: var(--ui-fg); font-size: 17px; line-height: 22px; font-weight: 600; font-variant-numeric: tabular-nums; }
.ui-stat-label { margin-top: 2px; color: var(--ui-fg-muted); font-size: 11px; line-height: 14px; }
.ui-stat-label i { display: inline-block; width: 6px; height: 6px; border-radius: 50%; margin-right: 3px; }

/* Barra de progreso: pista neutra, relleno del color que toque */
.ui-progress { height: 6px; border-radius: 3px; background: var(--ui-muted-bg); overflow: hidden; }
.ui-progress > span { display: block; height: 100%; width: 0; border-radius: 3px; background: var(--ui-accent); transition: width 0.5s var(--native-ease, ease); }

/* -----------------------------------------------------------------------------
   Hoja inferior y diálogo
   -------------------------------------------------------------------------- */
.ui-backdrop {
  position: fixed;
  inset: 0;
  z-index: 900;
  background: rgba(0, 0, 0, 0.4);
  opacity: 0;
  transition: opacity 0.25s var(--native-ease, ease);
}
.ui-backdrop.is-open { opacity: 1; }

.ui-sheet {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  z-index: 901;
  max-height: 88vh;
  overflow-y: auto;
  padding: 8px 16px calc(16px + var(--safe-bottom, 0px));
  border-top-left-radius: var(--ui-r-sheet);
  border-top-right-radius: var(--ui-r-sheet);
  background: var(--ui-bg);
  transform: translateY(100%);
  transition: transform 0.32s var(--native-ease, ease);
}
.ui-sheet.is-open { transform: translateY(0); }
@media (min-width: 480px) { .ui-sheet { max-width: 390px; margin-inline: auto; } }

.ui-grab { width: 36px; height: 5px; border-radius: 3px; background: var(--ui-border-strong); margin: 0 auto 14px; }

/* -----------------------------------------------------------------------------
   Estados: vacío, carga, error
   -------------------------------------------------------------------------- */
.ui-empty {
  display: grid;
  justify-items: center;
  gap: 6px;
  padding: 40px 24px;
  text-align: center;
}
.ui-empty > svg { width: 28px; height: 28px; color: var(--ui-fg-subtle); margin-bottom: 2px; }
.ui-empty-title { color: var(--ui-fg); font-size: 15px; font-weight: 600; line-height: 20px; }
.ui-empty-text { color: var(--ui-fg-muted); font-size: 13px; line-height: 18px; max-width: 34ch; }
.ui-empty .ui-btn { margin-top: 10px; }

.ui-skel { background: var(--ui-muted-bg); border-radius: 6px; animation: ui-pulse 1.4s ease-in-out infinite; }
@keyframes ui-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }

.ui-spinner {
  width: 18px;
  height: 18px;
  border: 2px solid var(--ui-border);
  border-top-color: var(--ui-accent);
  border-radius: 50%;
  animation: ui-spin 0.7s linear infinite;
}
@keyframes ui-spin { to { transform: rotate(360deg); } }

/* -----------------------------------------------------------------------------
   Utilidades mínimas
   -------------------------------------------------------------------------- */
.ui-stack { display: grid; gap: var(--ui-gap); }
.ui-row-gap { display: flex; align-items: center; gap: 8px; }
.ui-divider { height: 1px; background: var(--ui-border); border: 0; margin: 0; }
.ui-touch { position: relative; }
.ui-touch::after { content: ""; position: absolute; inset: -8px; }  /* llega a 44px */
