/* ── PRIMITIVAS (docs/41 Fase 1) ─────────────────────────────────────────────
   Misma anatomía que los componentes de apps/lab (components/ui/index.tsx), en
   clases CSS para las páginas de demo-client. Solo usan los tokens semánticos de
   /tokens.css: sin colores propios, sin sombras, un solo radio. Servido desde la
   raíz, junto a tokens.css. Prefijo .ui- para no chocar con las clases de cada página. */

.ui-btn {
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  height:40px; padding:0 18px; border-radius:var(--radius); border:1px solid transparent;
  font:600 14px/1 var(--font-sans); text-decoration:none; cursor:pointer;
  transition:background .15s var(--ease-out), border-color .15s var(--ease-out), opacity .15s;
}
.ui-btn--primary { background:var(--primary); color:var(--primary-foreground); }
.ui-btn--primary:hover { opacity:.88; }
.ui-btn--outline { background:transparent; color:var(--foreground); border-color:var(--border-strong); }
.ui-btn--outline:hover, .ui-btn--ghost:hover { background:var(--accent); }
.ui-btn--ghost { background:transparent; color:var(--foreground); }
.ui-btn--sm { height:30px; padding:0 12px; font-size:12px; }
.ui-btn:disabled { opacity:.5; cursor:default; }
.ui-btn:focus-visible, .ui-input:focus-visible { outline:2px solid var(--ring); outline-offset:2px; }

.ui-badge {
  display:inline-flex; align-items:center; gap:6px; height:22px; padding:0 8px;
  border:1px solid var(--border); border-radius:999px;
  font-size:12px; font-weight:600; white-space:nowrap; color:var(--foreground);
}
/* punto de estado: el color va en `color` del contenedor, el texto sigue en --foreground */
.ui-dot { width:7px; height:7px; border-radius:50%; background:currentColor; flex:none; }

.ui-card { background:var(--card); border:1px solid var(--border); border-radius:var(--radius); }
.ui-panel { background:var(--card); border:1px solid var(--border); border-radius:var(--radius); }
.ui-panel__head {
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  height:36px; padding:0 14px; border-bottom:1px solid var(--border); font-size:12px; font-weight:600;
}

.ui-input {
  height:40px; width:100%; padding:0 12px; background:transparent; color:var(--foreground);
  border:1px solid var(--border-strong); border-radius:var(--radius); font:400 14px var(--font-sans);
}
.ui-input::placeholder { color:var(--muted-foreground); }

.ui-eyebrow {
  font-family:var(--font-mono); font-size:11px; letter-spacing:.1em; text-transform:uppercase;
  color:var(--muted-foreground);
}
.ui-muted { color:var(--muted-foreground); }
.ui-tnum { font-variant-numeric:tabular-nums; }

.ui-stat { display:grid; gap:4px; padding:16px 18px; min-width:0; }
.ui-stat + .ui-stat { border-left:1px solid var(--border); }
.ui-stat__value { font-size:22px; font-weight:600; line-height:1.1; font-variant-numeric:tabular-nums; }
.ui-stat__label { font-size:12px; color:var(--muted-foreground); }

/* ── docs/41 Fase 1b (mockup 041): tarjetas redondeadas, carruseles, panel con degradé y
   menú móvil redondo. Botones y pastillas en 999px, tarjetas en --radius-card, paneles en
   --radius-panel. ───────────────────────────────────────────────────────────────────── */
.ui-btn { border-radius:999px; height:44px; padding:0 20px; }
.ui-btn--sm { height:30px; padding:0 12px; }
.ui-card { border-radius:var(--radius-card); }
.ui-panel { border-radius:var(--radius-panel); }

.ui-kpi { display:grid; gap:6px; padding:20px; background:var(--card); border:1px solid var(--border); border-radius:var(--radius-card); min-width:0; }
.ui-kpi__label { font-size:14px; color:var(--muted-foreground); }
.ui-kpi__value { font-family:var(--font-heading); font-weight:500; font-size:44px; line-height:1.05; letter-spacing:-.04em; font-variant-numeric:tabular-nums; color:var(--foreground); }

.ui-select {
  display:inline-flex; align-items:center; gap:10px; height:40px; padding:0 14px;
  border-radius:var(--radius); border:1px solid var(--border-strong); background:transparent;
  color:var(--foreground); font:600 13px var(--font-sans); cursor:pointer;
}

/* carrusel horizontal con imán; los hijos no se encogen */
.ui-scroller { display:flex; gap:14px; overflow-x:auto; scroll-snap-type:x mandatory; scrollbar-width:none; -webkit-overflow-scrolling:touch; }
.ui-scroller::-webkit-scrollbar { display:none; }
.ui-scroller > * { scroll-snap-align:start; flex:0 0 auto; }

.ui-panel-glass {
  border:1px solid var(--border-strong); border-radius:var(--radius-panel);
  background:radial-gradient(120% 90% at 70% 0%, color-mix(in srgb, var(--foreground) 10%, transparent), transparent 60%), var(--card);
}

/* ── menú móvil: botón redondo abajo al centro (menu-movil.js). Solo hasta 640px, el mismo corte en que la landing pasa a ser el reproductor a pantalla completa. ── */
.ui-fab, .ui-fab-label, .ui-menu-sheet { display:none; }
@media (max-width:640px) {
  .ui-fab {
    position:fixed; left:50%; z-index:1200; transform:translateX(-50%);
    bottom:calc(var(--fab-bottom, 62px) + env(safe-area-inset-bottom, 0px));
    width:72px; height:72px; border-radius:50%; border:0; padding:0; cursor:pointer;
    display:grid; place-items:center; background:#ffffff; color:#000000;
    box-shadow:0 8px 30px rgba(0,0,0,.45);
    transition:background .25s var(--ease-out), transform .25s var(--ease-out);
  }
  .ui-fab svg { width:26px; height:30px; }
  .ui-fab:focus-visible { outline:2px solid var(--brand-2); outline-offset:4px; }
  .ui-fab .ui-fab__lo { fill:#000000; }
  .ui-fab .ui-fab__hi { fill:var(--rs-red); }
  .ui-fab[aria-expanded="true"] { background:var(--rs-red); }
  .ui-fab[aria-expanded="true"] .ui-fab__lo, .ui-fab[aria-expanded="true"] .ui-fab__hi { fill:#ffffff; }
  /* Con el reproductor en pantalla el botón es su Play/Pausa (menu-movil.js pone la clase y data-state). */
  .ui-fab .ui-fab__icon { display:none; width:26px; height:26px; fill:#000000; }
  body.ui-fab--player .ui-fab .ui-fab__iso { display:none; }
  body.ui-fab--player .ui-fab[data-state="play"] .ui-fab__play,
  body.ui-fab--player .ui-fab[data-state="pause"] .ui-fab__pause,
  body.ui-fab--player .ui-fab[data-state="skip"] .ui-fab__skip { display:block; }
  /* Es un botón: fuera del reproductor repite al redondo (oculto para lectores de pantalla), con el
     reproductor en pantalla es el que abre el menú. */
  .ui-fab-label {
    display:block; position:fixed; z-index:1200; cursor:pointer; border:0; margin:0;
    left:calc(50% + 42px); bottom:calc(var(--fab-bottom, 62px) + 10px + env(safe-area-inset-bottom, 0px));
    writing-mode:vertical-rl; transform:rotate(180deg);
    font-family:var(--font-heading); font-size:17px; font-weight:500; color:#ffffff;
    background:rgba(0,0,0,.78); padding:10px 7px; border-radius:999px;
  }
  .ui-fab-label:focus-visible { outline:2px solid var(--brand-2); outline-offset:2px; }
  .ui-menu-sheet:not([hidden]) {
    display:grid; grid-template-rows:auto 1fr auto; position:fixed; inset:0; z-index:1150;
    background:#000000; color:#ffffff; padding-top:calc(18px + env(safe-area-inset-top, 0px));
    animation:ui-sheet-in .3s var(--ease-out);
  }
  body.ui-menu-open { overflow:hidden; }
}
@keyframes ui-sheet-in { from { opacity:0; transform:translateY(16px); } to { opacity:1; transform:none; } }
@media (prefers-reduced-motion: reduce) { .ui-menu-sheet:not([hidden]) { animation:none; } .ui-fab { transition:none; } }

.ui-menu-top { display:flex; justify-content:space-between; align-items:center; padding:6px 20px 18px; }
.ui-menu-cards { display:flex; gap:14px; overflow-x:auto; scroll-snap-type:x mandatory; scroll-padding-inline:20px; padding:0 20px 18px; align-items:flex-start; scrollbar-width:none; }
.ui-menu-cards::-webkit-scrollbar { display:none; }
.ui-menu-card {
  flex:0 0 218px; scroll-snap-align:start; display:grid; gap:12px; text-decoration:none; color:inherit;
  background:none; border:0; padding:0; font:inherit; text-align:left; cursor:pointer;
}
/* El título ocupa siempre el alto de dos renglones, pegado abajo: así todas las tarjetas
   arrancan a la misma altura aunque un título entre en un renglón y otro necesite dos. */
.ui-menu-card__title {
  display:flex; align-items:flex-end; min-height:2.4em; line-height:1.2;
  font-size:20px; font-weight:600; letter-spacing:-.02em; text-transform:uppercase;
}
.ui-menu-card__prev {
  aspect-ratio:3 / 4; border:1px solid rgba(255,255,255,.40); border-radius:var(--radius-card);
  background:#070707; padding:14px; display:grid; gap:8px; align-content:start; overflow:hidden;
}
.ui-menu-card__prev i { display:block; border-radius:6px; background:rgba(255,255,255,.14); height:8px; }
.ui-menu-card__prev .bars { display:flex; align-items:flex-end; gap:6px; height:90px; margin-top:6px; }
.ui-menu-card__prev .bars b { flex:1; background:#ffffff; border-radius:3px 3px 0 0; opacity:.85; }
.ui-menu-card__prev .field { display:block; height:30px; border:1px solid rgba(255,255,255,.40); border-radius:8px; background:none; }
.ui-menu-card__prev .btn { display:block; height:28px; border-radius:999px; background:#ffffff; width:60%; }
/* "Señales", la primera tarjeta y la principal: más ancha, con la tarjeta del reproductor en miniatura. */
.ui-menu-card--main { flex-basis:268px; }
.ui-menu-card--main .ui-menu-card__prev { display:flex; flex-direction:column; aspect-ratio:auto; height:calc(218px * 4 / 3); }
.ui-menu-card__prev .head { height:22px; width:70%; background:rgba(255,255,255,.85); }
.ui-menu-card__prev .prog { display:block; height:4px; border-radius:2px; margin-top:auto; background:linear-gradient(90deg, var(--brand) 42%, rgba(255,255,255,.14) 42%); }
.ui-menu-card__prev .ctrl { display:flex; align-items:center; justify-content:center; gap:14px; }
.ui-menu-card__prev .ctrl b { width:22px; height:22px; border-radius:50%; border:1px solid rgba(255,255,255,.40); }
.ui-menu-card__prev .ctrl b.main { width:36px; height:36px; border:0; background:#ffffff; }
.ui-menu-card:focus-visible .ui-menu-card__prev { outline:2px solid #ffffff; outline-offset:2px; }
.ui-menu-bottom { display:flex; justify-content:space-between; align-items:center; gap:16px; padding:0 20px calc(20px + env(safe-area-inset-bottom, 0px)); min-height:120px; }
.ui-menu-links { display:flex; flex-direction:column; gap:10px; }
.ui-menu-links a { color:#ffffff; font-size:15px; font-weight:600; text-decoration:none; }
.ui-sq { display:flex; border:1px solid #ffffff; }
.ui-sq a { width:46px; height:46px; display:grid; place-items:center; text-decoration:none; color:#ffffff; font:700 13px var(--font-mono); }
.ui-sq a + a { border-left:1px solid #ffffff; }
.ui-sq svg { width:18px; height:18px; }
