/* =========================================================
   GRIFO · Tótem de cerveza autoservicio
   Diseño vertical, escalado proporcional con unidades em.
   ========================================================= */

:root {
  --bg: #0B0C10;
  --surface: #171A21;
  --surface-2: #1F232C;
  --surface-3: #2B303B;
  --line: rgba(255, 255, 255, .08);
  --text: #F6F7F9;
  --muted: #8E95A3;

  --accent: #FFB020;
  --accent-2: #FF7A1A;
  --accent-ink: #1A1204;
  --accent-deep: #B86E00;
  --ok: #22C55E;
  --danger: #FF5A5F;
  --warn: #FBBF24;

  --radius: 1.1em;
  --radius-sm: .7em;
  --ease: cubic-bezier(.22, 1, .36, 1);
  --spring: cubic-bezier(.34, 1.56, .64, 1);
}

* { box-sizing: border-box; margin: 0; padding: 0; }
[hidden] { display: none !important; }

html, body {
  height: 100%;
  background: #050608;
  color: var(--text);
  font-family: 'Outfit', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  overflow: hidden;
  -webkit-user-select: none;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
  -webkit-font-smoothing: antialiased;
}

/* Todo escala con este font-size: el lienzo mantiene proporción 9:16 */
body {
  display: grid;
  place-items: center;
  font-size: clamp(13px, min(3.1vw, 1.72vh), 40px);
}

button { font: inherit; color: inherit; border: 0; background: none; cursor: pointer; }
b { font-weight: 700; }

/* =========================================================
   CONTENEDOR
   ========================================================= */
.app {
  position: relative;
  width: min(100vw, 56.25vh);
  height: 100vh;
  height: 100dvh;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background:
    radial-gradient(120% 45% at 50% -8%, rgba(255, 176, 32, .16), transparent 60%),
    radial-gradient(80% 40% at 100% 110%, rgba(255, 122, 26, .08), transparent 60%),
    var(--bg);
}

/* =========================================================
   BARRA SUPERIOR + PROGRESO
   ========================================================= */
.topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1.2em 1.4em .3em;
}

.brand {
  display: flex;
  align-items: center;
  gap: .45em;
  font-weight: 700;
  font-size: 1.2em;
  letter-spacing: .01em;
}
.brand__logo {
  width: 1.7em; height: 1.7em;
  border-radius: .55em;
  display: grid; place-items: center;
  background: linear-gradient(135deg, var(--accent), var(--accent-2));
  color: var(--accent-ink);
  box-shadow: 0 .3em .9em rgba(255, 140, 20, .35);
}
.brand__logo svg { width: 1em; height: 1em; }

.icon-btn {
  position: relative;
  overflow: hidden;
  width: 2.9em; height: 2.9em;
  border-radius: 50%;
  display: grid; place-items: center;
  background: var(--surface-2);
  box-shadow: 0 .22em 0 #07080b, inset 0 1px 0 rgba(255, 255, 255, .06);
  transition: transform .1s var(--ease), box-shadow .1s var(--ease), opacity .3s;
}
.icon-btn svg { width: 1.3em; height: 1.3em; }
.icon-btn.is-pressed { transform: translateY(.2em); box-shadow: 0 .02em 0 #07080b; }
.icon-btn.is-hidden { opacity: 0; pointer-events: none; }

.progress { padding: .8em 1.4em .4em; }
.progress__inner {
  position: relative;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
}
.progress__track {
  position: absolute;
  top: 1em; left: 12.5%; right: 12.5%;
  height: .24em;
  margin-top: -.12em;
  border-radius: 1em;
  background: var(--surface-3);
  overflow: hidden;
}
.progress__fill {
  height: 100%;
  width: 0;
  background: linear-gradient(90deg, var(--accent), var(--accent-2));
  transition: width .7s var(--ease);
}
.progress__step {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .4em;
}
.progress__dot {
  width: 2em; height: 2em;
  border-radius: 50%;
  display: grid; place-items: center;
  background: var(--surface-2);
  border: .14em solid var(--surface-3);
  color: var(--muted);
  font-weight: 700;
  transition: all .4s var(--ease);
}
.progress__num { font-size: .85em; }
.progress__dot svg { display: none; width: .95em; height: .95em; }
.progress__label { font-size: .72em; font-weight: 500; color: var(--muted); transition: color .3s; }

.progress__step.is-current .progress__dot {
  background: var(--accent);
  border-color: #FFD27A;
  color: var(--accent-ink);
  transform: scale(1.1);
  box-shadow: 0 0 0 .35em rgba(255, 176, 32, .18);
}
.progress__step.is-current .progress__label { color: var(--text); font-weight: 600; }
.progress__step.is-done .progress__dot {
  background: linear-gradient(135deg, var(--accent), var(--accent-2));
  border-color: transparent;
  color: var(--accent-ink);
}
.progress__step.is-done .progress__dot svg { display: block; }
.progress__step.is-done .progress__num { display: none; }
.progress__step.is-done .progress__label { color: #C9CDD5; }

/* =========================================================
   VISTAS (transición direccional)
   ========================================================= */
.views { position: relative; flex: 1; min-height: 0; }

.view {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateX(14%);
  transition: opacity .4s var(--ease), transform .55s var(--ease), visibility 0s .55s;
}
.view.is-past { transform: translateX(-14%); }
.view.is-active {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: none;
  transition: opacity .45s var(--ease) .05s, transform .6s var(--ease), visibility 0s;
}

.view__body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: .9em 1.4em 1em;
  display: flex;
  flex-direction: column;
  gap: 1em;
  scrollbar-width: none;
}
.view__body::-webkit-scrollbar { display: none; }
.view__body--center { justify-content: safe center; gap: 1.6em; }

.view__head.center { text-align: center; }

.view__foot {
  display: flex;
  align-items: center;
  gap: 1em;
  padding: 1em 1.4em 1.8em;
  border-top: 1px solid var(--line);
  background: linear-gradient(180deg, rgba(11, 12, 16, .6), var(--bg));
}

.title { font-size: 1.95em; font-weight: 700; line-height: 1.08; letter-spacing: -.02em; }
.subtitle { color: var(--muted); font-size: 1em; margin-top: .35em; line-height: 1.35; }
.section-label {
  font-size: .78em;
  font-weight: 600;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--muted);
  margin-bottom: -.4em;
}

.total { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.total__label { font-size: .8em; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.total__value { font-size: 1.85em; font-weight: 800; letter-spacing: -.02em; line-height: 1.1; display: inline-block; transform-origin: left center; }

/* =========================================================
   BOTONES · efecto 3D de pulsación
   ========================================================= */
.btn {
  --c: var(--surface-2);
  --d: #07080b;
  --ink: var(--text);
  position: relative;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .5em;
  min-height: 3.3em;
  padding: 0 1.7em;
  border-radius: var(--radius);
  background: var(--c);
  color: var(--ink);
  font-size: 1.1em;
  font-weight: 700;
  letter-spacing: .01em;
  white-space: nowrap;
  box-shadow: 0 .32em 0 var(--d), 0 .7em 1.4em rgba(0, 0, 0, .35), inset 0 1px 0 rgba(255, 255, 255, .25);
  transition: transform .1s var(--ease), box-shadow .1s var(--ease), filter .3s, opacity .3s;
}
.btn.is-pressed {
  transform: translateY(.28em);
  box-shadow: 0 .04em 0 var(--d), 0 .2em .4em rgba(0, 0, 0, .3), inset 0 1px 0 rgba(255, 255, 255, .15);
}
.btn--primary {
  --c: linear-gradient(180deg, #FFC54F, #FFA514);
  --d: var(--accent-deep);
  --ink: var(--accent-ink);
}
.btn--secondary { --c: var(--surface-3); }
.btn--ghost {
  --c: transparent;
  --d: transparent;
  box-shadow: none;
  color: var(--muted);
}
.btn--block { width: 100%; }
.btn--xl { min-height: 3.7em; font-size: 1.25em; }
.btn[aria-disabled="true"] { filter: grayscale(1) brightness(.55); }

.pulse { animation: pulse 2.2s ease-out infinite; }

.link-btn {
  color: var(--accent);
  font-weight: 600;
  padding: .4em .3em;
  text-decoration: underline;
  text-underline-offset: .22em;
  transition: opacity .2s, transform .1s;
}
.link-btn.is-pressed { transform: scale(.95); opacity: .7; }
.link-btn[aria-disabled="true"] { color: var(--muted); text-decoration: none; }

.pressable { position: relative; overflow: hidden; }

.ripple {
  position: absolute;
  border-radius: 50%;
  background: rgba(255, 255, 255, .28);
  transform: scale(0);
  pointer-events: none;
  animation: ripple .6s ease-out forwards;
}

.chip {
  display: inline-flex;
  align-items: center;
  padding: .3em .75em;
  border-radius: 99em;
  background: rgba(255, 255, 255, .07);
  color: #C9CDD5;
  font-size: .72em;
  font-weight: 600;
  letter-spacing: .04em;
}

/* =========================================================
   VASO (componente reutilizable)
   ========================================================= */
.glass {
  --w: 4em;
  --h: 5.4em;
  position: relative;
  width: var(--w);
  height: var(--h);
  flex-shrink: 0;
  transform: scale(var(--scale, 1));
  transform-origin: 50% 100%;
  transition: transform .55s var(--spring);
  filter: drop-shadow(0 0 .045em rgba(255, 255, 255, .75)) drop-shadow(0 .4em .6em rgba(0, 0, 0, .35));
}
.glass--xs  { --w: 1.9em; --h: 2.6em; }
.glass--sm  { --w: 2.4em; --h: 3.2em; }
.glass--xl  { --w: 8em;   --h: 11em; }
.glass--xxl { --w: 9.5em; --h: 13.2em; }

.glass__body {
  position: absolute;
  inset: 0;
  overflow: hidden;
  clip-path: polygon(0 0, 100% 0, 87% 100%, 13% 100%);
  background:
    linear-gradient(90deg, rgba(255, 255, 255, .14), rgba(255, 255, 255, .03) 45%, rgba(255, 255, 255, .12)),
    rgba(255, 255, 255, .04);
}
/* Base gruesa del vaso */
.glass__body::after {
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 6%;
  background: rgba(255, 255, 255, .22);
}

.glass__liquid {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: var(--level);
  overflow: hidden;
  background-color: var(--beer);
  background-image: linear-gradient(90deg, rgba(0, 0, 0, .28), transparent 40%, rgba(255, 255, 255, .16) 70%, rgba(0, 0, 0, .15));
  transition: height .8s var(--ease), background-color .6s ease;
}

.glass__foam {
  position: absolute;
  left: 0; right: 0;
  bottom: var(--level);
  height: var(--foam-h);
  background: linear-gradient(180deg, #fff, var(--foam));
  transition: bottom .8s var(--ease), height .8s var(--ease), background .6s;
}
.glass__foam::before {
  content: '';
  position: absolute;
  left: 0; right: 0;
  bottom: 100%;
  height: calc(var(--w) * .07);
  background: radial-gradient(circle at 50% 100%, #fff 62%, transparent 65%) 0 100% / calc(var(--w) * .14) 100% repeat-x;
}
.glass.is-empty .glass__foam { opacity: 0; }

.glass__shine {
  position: absolute;
  top: 6%; bottom: 10%; left: 16%;
  width: 7%;
  border-radius: 1em;
  background: linear-gradient(180deg, rgba(255, 255, 255, .45), rgba(255, 255, 255, .05));
  z-index: 2;
}

/* Durante la dispensación el nivel lo controla requestAnimationFrame */
.glass.is-live .glass__liquid,
.glass.is-live .glass__foam { transition: background-color .6s ease; }

.bubble {
  position: absolute;
  bottom: 0;
  left: var(--x);
  width: calc(var(--w) * var(--s));
  height: calc(var(--w) * var(--s));
  border-radius: 50%;
  background: rgba(255, 255, 255, .55);
  opacity: 0;
  animation: rise var(--d) linear var(--delay) infinite;
}
.bubble--burst {
  background: rgba(255, 255, 255, .8);
  animation-iteration-count: 1;
  animation-timing-function: var(--ease);
}

/* =========================================================
   VISTA 1 · SELECCIÓN
   ========================================================= */
.preview {
  position: relative;
  display: grid;
  grid-template-columns: auto 1fr;
  align-items: center;
  gap: 1.1em;
  min-height: 14.5em;
  padding: 1em 1.4em;
  border-radius: 1.5em;
  background: linear-gradient(160deg, var(--surface-2), var(--surface));
  border: 1px solid var(--line);
  overflow: hidden;
}
.preview::before {
  content: '';
  position: absolute;
  inset: -40% -20% auto auto;
  width: 70%; aspect-ratio: 1;
  border-radius: 50%;
  background: radial-gradient(closest-side, var(--glow), transparent);
  opacity: .22;
  transition: background .6s;
}
.preview__stage {
  position: relative;
  width: 9em;
  height: 12em;
  display: flex;
  align-items: flex-end;
  justify-content: center;
}
.preview__glow {
  position: absolute;
  left: 10%; right: 10%; bottom: -.5em;
  height: 1.4em;
  border-radius: 50%;
  background: var(--glow);
  filter: blur(.9em);
  opacity: .55;
  transition: background .6s;
}
.preview__info { position: relative; }
.preview__name { font-size: 1.6em; font-weight: 700; line-height: 1.1; margin: .45em 0 .25em; }
.preview__desc { color: var(--muted); font-size: .95em; line-height: 1.35; }
.preview__stats { display: flex; flex-wrap: wrap; gap: .45em; margin-top: .9em; }
.stat {
  padding: .45em .7em;
  border-radius: .7em;
  background: rgba(255, 255, 255, .05);
  color: var(--muted);
  font-size: .74em;
}
.stat b { display: block; color: var(--text); font-size: 1.25em; }

.beer-list, .size-list {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: .7em;
}

.beer-card, .size-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  border-radius: var(--radius);
  background: var(--surface);
  border: .12em solid var(--line);
  box-shadow: 0 .3em 0 #07080b;
  transition: transform .12s var(--ease), box-shadow .12s var(--ease), border-color .3s, background .3s;
}
.beer-card.is-pressed, .size-card.is-pressed, .method.is-pressed {
  transform: translateY(.26em) scale(.98);
  box-shadow: 0 .04em 0 #07080b;
}

.beer-card { gap: .35em; padding: .9em .3em .8em; }
.beer-card .glass { margin-bottom: .2em; }
.beer-card__name { font-size: .84em; font-weight: 600; line-height: 1.1; text-align: center; }
.beer-card__meta { font-size: .68em; color: var(--muted); }
.beer-card.is-selected {
  border-color: var(--accent-beer);
  background: linear-gradient(180deg, color-mix(in srgb, var(--accent-beer) 22%, var(--surface)), var(--surface));
  box-shadow: 0 .3em 0 color-mix(in srgb, var(--accent-beer) 50%, #000), 0 0 1.4em color-mix(in srgb, var(--accent-beer) 25%, transparent);
}
.beer-card.is-selected .glass { animation: wobble .6s var(--spring); }

.size-card { gap: .15em; padding: 1em .3em .8em; }
.size-card__icon { height: 2.8em; display: flex; align-items: flex-end; margin-bottom: .35em; }
.size-card__ml { font-size: 1.05em; font-weight: 700; }
.size-card__label { font-size: .7em; color: var(--muted); }
.size-card__price { font-size: .82em; font-weight: 600; color: var(--accent); margin-top: .25em; }
.size-card.is-selected {
  border-color: var(--accent);
  background: linear-gradient(180deg, rgba(255, 176, 32, .16), var(--surface));
  box-shadow: 0 .3em 0 #6B4200, 0 0 1.3em rgba(255, 176, 32, .22);
}
.badge {
  position: absolute;
  top: 0; right: 0;
  padding: .25em .6em;
  border-radius: 0 0 0 .7em;
  background: var(--accent);
  color: var(--accent-ink);
  font-size: .58em;
  font-weight: 700;
  letter-spacing: .03em;
  text-transform: uppercase;
}

/* =========================================================
   VISTA 2 · AUTENTICACIÓN
   ========================================================= */
.auth-panel { text-align: center; animation: fadeUp .45s var(--ease); }

.hero-icon {
  width: 3.8em; height: 3.8em;
  margin: 0 auto 1em;
  border-radius: 1.2em;
  display: grid; place-items: center;
  background: rgba(255, 176, 32, .12);
  color: var(--accent);
}
.hero-icon svg { width: 1.9em; height: 1.9em; }

.phone-field {
  display: flex;
  align-items: center;
  gap: .6em;
  margin-top: 1.1em;
  padding: .8em 1em;
  border-radius: var(--radius);
  background: var(--surface);
  border: .12em solid var(--accent);
  box-shadow: 0 0 0 .3em rgba(255, 176, 32, .1);
  font-size: 1.6em;
  font-weight: 600;
  transition: border-color .3s, box-shadow .3s;
}
.phone-field__prefix {
  padding-right: .6em;
  border-right: 1px solid var(--line);
  color: var(--muted);
  font-size: .75em;
  white-space: nowrap;
}
.phone-field__value { flex: 1; text-align: left; letter-spacing: .04em; }
.phone-field__value::after {
  content: '';
  display: inline-block;
  width: .08em; height: 1em;
  margin-left: .08em;
  vertical-align: -.12em;
  background: var(--accent);
  animation: blink 1s steps(1) infinite;
}
.phone-field.is-valid { border-color: var(--ok); box-shadow: 0 0 0 .3em rgba(34, 197, 94, .12); }
.phone-field.is-error { border-color: var(--danger); box-shadow: 0 0 0 .3em rgba(255, 90, 95, .12); }
.placeholder { color: #444A56; }

.field-hint { min-height: 1.3em; margin-top: .6em; font-size: .85em; color: var(--muted); transition: color .2s; }
.field-hint.is-error { color: var(--danger); }
.field-hint.is-ok { color: var(--ok); }

.otp {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: .5em;
  margin-top: 1.2em;
}
.otp__box {
  aspect-ratio: .82;
  display: grid; place-items: center;
  border-radius: var(--radius-sm);
  background: var(--surface);
  border: .12em solid var(--line);
  font-size: 1.8em;
  font-weight: 700;
  transition: border-color .2s, box-shadow .2s, color .2s;
}
.otp__box.is-filled { border-color: rgba(255, 255, 255, .25); animation: pop .22s var(--spring); }
.otp__box.is-current { border-color: var(--accent); box-shadow: 0 0 0 .18em rgba(255, 176, 32, .15); }
.otp.is-error .otp__box { border-color: var(--danger); color: var(--danger); }
.otp.is-ok .otp__box { border-color: var(--ok); color: var(--ok); background: rgba(34, 197, 94, .08); }

.keypad {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: .7em;
  width: 100%;
  max-width: 21em;
  margin: 0 auto;
}
.key {
  position: relative;
  overflow: hidden;
  height: 2.3em;
  border-radius: .7em;
  display: grid; place-items: center;
  background: var(--surface-2);
  font-size: 1.55em;
  font-weight: 600;
  box-shadow: 0 .14em 0 #07080b, inset 0 1px 0 rgba(255, 255, 255, .05);
  transition: transform .08s var(--ease), box-shadow .08s var(--ease), background .15s;
}
.key.is-pressed { transform: translateY(.12em); box-shadow: 0 .02em 0 #07080b; background: var(--surface-3); }
.key--fn { background: transparent; box-shadow: none; color: var(--muted); }
.key--fn.is-pressed { background: var(--surface); }
.key svg { width: 1em; height: 1em; }
.key__txt { font-size: .55em; font-weight: 600; }

/* =========================================================
   VISTA 3 · PAGO
   ========================================================= */
.order {
  display: flex;
  align-items: center;
  gap: 1em;
  padding: 1em 1.2em;
  border-radius: 1.2em;
  background: var(--surface);
  border: 1px solid var(--line);
}
.order__glass { width: 2.6em; display: flex; justify-content: center; }
.order__info { flex: 1; min-width: 0; }
.order__name { font-size: 1.1em; font-weight: 700; }
.order__meta { font-size: .82em; color: var(--muted); }
.order__price { font-size: 1.3em; font-weight: 800; }

.method-list { display: grid; gap: .7em; }
.method {
  display: flex;
  align-items: center;
  gap: 1em;
  padding: .95em 1.2em;
  border-radius: var(--radius);
  background: var(--surface);
  border: .12em solid var(--line);
  box-shadow: 0 .3em 0 #07080b;
  text-align: left;
  transition: transform .12s var(--ease), box-shadow .12s var(--ease), border-color .3s, background .3s;
}
.method__icon {
  width: 2.9em; height: 2.9em;
  flex-shrink: 0;
  border-radius: .85em;
  display: grid; place-items: center;
  background: color-mix(in srgb, var(--mc) 16%, transparent);
  color: var(--mc);
}
.method__icon svg { width: 1.45em; height: 1.45em; }
.method__text { flex: 1; display: flex; flex-direction: column; }
.method__name { font-size: 1.1em; font-weight: 700; }
.method__sub { font-size: .8em; color: var(--muted); }
.method__radio {
  width: 1.5em; height: 1.5em;
  border-radius: 50%;
  border: .14em solid var(--surface-3);
  display: grid; place-items: center;
  transition: all .25s var(--spring);
}
.method__radio::after {
  content: '';
  width: .55em; height: .55em;
  border-radius: 50%;
  background: var(--accent-ink);
  transform: scale(0);
  transition: transform .25s var(--spring);
}
.method.is-selected {
  border-color: var(--accent);
  background: linear-gradient(90deg, rgba(255, 176, 32, .12), var(--surface) 70%);
  box-shadow: 0 .3em 0 #6B4200;
}
.method.is-selected .method__radio { border-color: var(--accent); background: var(--accent); }
.method.is-selected .method__radio::after { transform: scale(1); }

.method-detail {
  display: flex;
  align-items: center;
  gap: 1.2em;
  padding: 1.2em;
  border-radius: 1.2em;
  background: rgba(255, 255, 255, .03);
  border: .1em dashed rgba(255, 255, 255, .14);
}
.detail__title { font-size: 1.05em; font-weight: 700; }
.detail__text { margin-top: .3em; font-size: .85em; color: var(--muted); line-height: 1.4; }
.steps { margin-top: .5em; padding-left: 1.2em; color: var(--muted); font-size: .85em; line-height: 1.6; }
.llave {
  display: inline-block;
  margin-top: .6em;
  padding: .4em .8em;
  border-radius: .6em;
  background: rgba(192, 132, 252, .14);
  color: #D8B4FE;
  font-weight: 700;
  letter-spacing: .02em;
}
.qr {
  width: 7.5em; height: 7.5em;
  flex-shrink: 0;
  border-radius: .7em;
  box-shadow: 0 .5em 1.2em rgba(0, 0, 0, .4);
}

/* Datáfono ilustrado */
.pos {
  position: relative;
  width: 5.6em; height: 7.6em;
  flex-shrink: 0;
  padding: .5em;
  border-radius: 1em;
  background: linear-gradient(180deg, #2E333E, #1A1D24);
  border: 1px solid rgba(255, 255, 255, .1);
}
.pos__screen {
  height: 2.4em;
  border-radius: .45em;
  display: grid; place-items: center;
  background: linear-gradient(135deg, #1E3A5F, #0F1F33);
  color: #9CC9FF;
  font-size: .62em;
  font-weight: 700;
}
.pos__keys { display: grid; grid-template-columns: repeat(3, 1fr); gap: .3em; margin-top: .55em; }
.pos__keys i { height: .7em; border-radius: .2em; background: rgba(255, 255, 255, .12); }
.pos__card {
  position: absolute;
  top: -.8em; right: -1.6em;
  width: 3.6em; height: 2.3em;
  border-radius: .35em;
  background: linear-gradient(135deg, #60A5FA, #6366F1);
  box-shadow: 0 .4em .9em rgba(0, 0, 0, .45);
  animation: tapCard 2.4s var(--ease) infinite;
}
.pos__card::after {
  content: '';
  position: absolute;
  top: .45em; left: .45em;
  width: .7em; height: .5em;
  border-radius: .12em;
  background: #FCD34D;
}

/* =========================================================
   VISTA 4 · DISPENSACIÓN
   ========================================================= */
.tap-stage {
  --beer: var(--accent);
  position: relative;
  flex-shrink: 0;
  width: 100%;
  height: 21.5em;
}
.tap {
  position: absolute;
  top: 0; left: 50%;
  width: 7em; height: 6.6em;
  transform: translateX(-50%);
}
.tap__handle {
  position: absolute;
  top: 0; left: 50%;
  width: 1.1em; height: 3.6em;
  margin-left: -.55em;
  border-radius: .6em .6em .3em .3em;
  background: linear-gradient(90deg, #C77800, var(--accent) 50%, #C77800);
  transform-origin: 50% 100%;
  transition: transform .5s var(--spring);
  box-shadow: 0 .3em .6em rgba(0, 0, 0, .4);
}
.tap__body {
  position: absolute;
  top: 3.3em; left: 0; right: 0;
  height: 2em;
  border-radius: 1em;
  background: linear-gradient(180deg, #EEF1F5, #9AA3AD 55%, #646C76);
  box-shadow: inset 0 -.2em .3em rgba(0, 0, 0, .3), 0 .4em 1em rgba(0, 0, 0, .45);
}
.tap__body::before {
  content: '';
  position: absolute;
  right: 92%; top: .45em;
  width: 30em; height: 1.1em;
  background: linear-gradient(180deg, #C9CED5, #646C76);
}
.tap__spout {
  position: absolute;
  top: 5.1em; left: 50%;
  width: 1.3em; height: 1.5em;
  margin-left: -.65em;
  border-radius: 0 0 .45em .45em;
  background: linear-gradient(90deg, #7D858F, #EEF1F5, #7D858F);
}
.stream {
  position: absolute;
  top: 6.5em; bottom: 1.8em; left: 50%;
  width: .55em;
  margin-left: -.275em;
  border-radius: .3em;
  background: repeating-linear-gradient(180deg, var(--beer) 0 .9em, color-mix(in srgb, var(--beer) 70%, #fff) .9em 1.3em);
  background-size: 100% 2.6em;
  transform: scaleY(0);
  transform-origin: top;
  transition: transform .35s var(--ease);
  animation: flow .35s linear infinite;
}
.tap-stage.is-pouring .stream { transform: scaleY(1); }
.tap-stage.is-pouring .tap__handle { transform: rotate(-28deg); }

.tap-stage__glass {
  position: absolute;
  bottom: 1.1em; left: 50%;
  z-index: 2;
  transform: translateX(-50%);
  cursor: pointer;
}
.tap-stage__tray {
  position: absolute;
  bottom: 0; left: 50%;
  width: 15em; height: 1.1em;
  margin-left: -7.5em;
  border-radius: .45em;
  background: repeating-linear-gradient(90deg, #2B303B 0 .5em, #1C2028 .5em 1em);
  box-shadow: inset 0 .2em .3em rgba(0, 0, 0, .5), 0 .2em 0 #07080b;
}
.tap-stage.is-done .tap-stage__glass .glass { animation: celebrate 1.2s var(--spring); }

.pour-meter { width: 100%; max-width: 22em; margin: 0 auto; }
.pour-meter__row { display: flex; align-items: baseline; justify-content: space-between; gap: 1em; }
#pour-ml { font-size: 2.2em; font-weight: 800; font-variant-numeric: tabular-nums; letter-spacing: -.02em; }
#pour-target { color: var(--muted); }
.bar { height: .7em; margin-top: .5em; border-radius: 1em; background: var(--surface-2); overflow: hidden; }
.bar__fill { height: 100%; width: 0; border-radius: inherit; background: linear-gradient(90deg, var(--accent), var(--accent-2)); }

.fact { min-height: 2.8em; max-width: 22em; margin: 0 auto; text-align: center; color: var(--muted); line-height: 1.4; }

/* =========================================================
   BIENVENIDA
   ========================================================= */
.welcome {
  position: absolute;
  inset: 0;
  z-index: 40;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1.4em;
  padding: 2em 2em 6em;
  text-align: center;
  background:
    radial-gradient(90% 45% at 50% 38%, rgba(255, 176, 32, .2), transparent 70%),
    var(--bg);
  transition: opacity .5s var(--ease), transform .6s var(--ease), visibility 0s;
}
.welcome.is-hidden { opacity: 0; visibility: hidden; transform: scale(1.06); transition: opacity .5s var(--ease), transform .6s var(--ease), visibility 0s .6s; }
.welcome__brand { position: absolute; top: 1.6em; left: 50%; transform: translateX(-50%); }
.welcome__glass { animation: float 4s ease-in-out infinite; margin-bottom: 1em; }
.welcome__title { font-size: 2.9em; font-weight: 800; line-height: 1.02; letter-spacing: -.03em; }
.welcome__title span {
  background: linear-gradient(90deg, var(--accent), var(--accent-2));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.welcome__sub { max-width: 19em; color: var(--muted); font-size: 1.1em; }
.welcome .btn { margin-top: .6em; }
.legal {
  position: absolute;
  left: 2em; right: 2em; bottom: 1.8em;
  font-size: .66em;
  line-height: 1.45;
  color: #5D6370;
}

/* =========================================================
   OVERLAY / TOAST / CONFETI
   ========================================================= */
.overlay {
  position: absolute;
  inset: 0;
  z-index: 50;
  display: grid;
  place-items: center;
  padding: 2em;
  background: rgba(5, 6, 8, .72);
  -webkit-backdrop-filter: blur(.5em);
  backdrop-filter: blur(.5em);
  opacity: 0;
  pointer-events: none;
  transition: opacity .3s;
}
.overlay.is-visible { opacity: 1; pointer-events: auto; }
.overlay__card {
  width: 100%;
  max-width: 23em;
  padding: 2em 1.6em 1.6em;
  border-radius: 1.6em;
  background: var(--surface);
  border: 1px solid var(--line);
  text-align: center;
  box-shadow: 0 2em 4em rgba(0, 0, 0, .5);
  transform: translateY(1.5em) scale(.95);
  transition: transform .45s var(--spring);
}
.overlay.is-visible .overlay__card { transform: none; }
.overlay__icon {
  width: 4.6em; height: 4.6em;
  margin: 0 auto;
  border-radius: 50%;
  display: grid; place-items: center;
  background: rgba(255, 176, 32, .14);
  color: var(--accent);
}
.overlay__icon svg { width: 2.2em; height: 2.2em; }
.overlay__icon.is-ok { background: var(--ok); color: #fff; box-shadow: 0 0 0 .6em rgba(34, 197, 94, .15); animation: pop .5s var(--spring); }
.overlay__icon.is-warn { background: rgba(251, 191, 36, .14); color: var(--warn); }
.overlay__title { margin-top: .8em; font-size: 1.5em; font-weight: 700; }
.overlay__text { margin-top: .4em; color: var(--muted); line-height: 1.45; }
.overlay__actions { display: grid; gap: .8em; margin-top: 1.6em; }
.overlay__actions:empty { display: none; }

.spinner {
  width: 4.6em; height: 4.6em;
  margin: 0 auto;
  border-radius: 50%;
  border: .38em solid var(--surface-3);
  border-top-color: var(--accent);
  animation: spin .9s linear infinite;
}

.toast {
  position: absolute;
  top: 1em; left: 1em; right: 1em;
  z-index: 60;
  display: flex;
  align-items: center;
  gap: .8em;
  padding: .9em 1.1em;
  border-radius: 1.2em;
  background: rgba(36, 40, 50, .94);
  -webkit-backdrop-filter: blur(1em);
  backdrop-filter: blur(1em);
  border: 1px solid rgba(255, 255, 255, .1);
  box-shadow: 0 1em 2.4em rgba(0, 0, 0, .5);
  transform: translateY(-160%);
  transition: transform .55s var(--spring);
  cursor: pointer;
}
.toast.is-visible { transform: none; }
.toast__icon {
  width: 2.4em; height: 2.4em;
  flex-shrink: 0;
  border-radius: .7em;
  display: grid; place-items: center;
  background: var(--ok);
  color: #fff;
}
.toast__icon svg { width: 1.2em; height: 1.2em; }
.toast__body { display: flex; flex-direction: column; }
.toast__title { font-size: .75em; color: var(--muted); }
.toast__text { font-size: 1em; }
.toast__text b { color: var(--accent); letter-spacing: .1em; }
.toast__text small { display: block; font-size: .75em; color: var(--muted); }

.confetti { position: absolute; inset: 0; z-index: 30; pointer-events: none; overflow: hidden; }
.confetti i {
  position: absolute;
  top: -1em;
  left: var(--x);
  width: .5em; height: .9em;
  border-radius: .15em;
  background: var(--c);
  transform: rotate(var(--r));
  animation: fall var(--d) var(--ease) var(--delay) forwards;
}

/* =========================================================
   ANIMACIONES
   ========================================================= */
.fade-up { animation: fadeUp .45s var(--ease); }
.shake   { animation: shake .4s ease; }
.bump    { animation: bump .35s var(--spring); }
.pop     { animation: pop .35s var(--spring); }
.wobble  { animation: wobble .6s var(--spring); }

@keyframes fadeUp   { from { opacity: 0; transform: translateY(.8em); } to { opacity: 1; transform: none; } }
@keyframes shake    { 0%, 100% { translate: 0; } 20%, 60% { translate: -.4em; } 40%, 80% { translate: .4em; } }
@keyframes bump     { 0% { transform: scale(1); } 40% { transform: scale(1.12); } 100% { transform: scale(1); } }
@keyframes pop      { 0% { transform: scale(.8); } 60% { transform: scale(1.08); } 100% { transform: scale(1); } }
@keyframes wobble   { 0%, 100% { rotate: 0deg; } 25% { rotate: -5deg; } 50% { rotate: 4deg; } 75% { rotate: -2deg; } }
@keyframes celebrate { 0%, 100% { translate: 0 0; } 30% { translate: 0 -1em; } 60% { translate: 0 0; } 80% { translate: 0 -.3em; } }
@keyframes spin     { to { transform: rotate(360deg); } }
@keyframes blink    { 50% { opacity: 0; } }
@keyframes ripple   { to { transform: scale(1); opacity: 0; } }
@keyframes float    { 0%, 100% { translate: 0 0; } 50% { translate: 0 -.6em; } }
@keyframes flow     { to { background-position: 0 2.6em; } }
@keyframes rise {
  0%   { transform: translateY(0); opacity: 0; }
  15%  { opacity: .9; }
  100% { transform: translateY(calc(var(--h) * -1)); opacity: 0; }
}
@keyframes fall { to { transform: translate(var(--dx), 75em) rotate(calc(var(--r) + 720deg)); } }
@keyframes tapCard {
  0%, 100% { transform: translate(1em, -.6em) rotate(12deg); }
  45%, 60% { transform: translate(-1.2em, 1.4em) rotate(-4deg); }
}
@keyframes pulse {
  0%   { box-shadow: 0 .32em 0 var(--d), 0 0 0 0 rgba(255, 176, 32, .5); }
  70%  { box-shadow: 0 .32em 0 var(--d), 0 0 0 1em rgba(255, 176, 32, 0); }
  100% { box-shadow: 0 .32em 0 var(--d), 0 0 0 0 rgba(255, 176, 32, 0); }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
}
