> ## Documentation Index
> Fetch the complete documentation index at: https://docs.compago.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cómo usar el modo kiosko

> Deja tu terminal esperando los cobros de un tótem de autopago y sal del modo con tu PIN de salida.

export const SupportBox = () => <aside className="cm-support">
		<span className="cm-support-icon">
			<svg className="cm-icon" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
				<path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zM12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zM4.93 4.93l4.24 4.24M14.83 9.17l4.24-4.24M14.83 14.83l4.24 4.24M9.17 14.83l-4.24 4.24" />
			</svg>
		</span>
		<div className="cm-support-body">
			<p className="cm-support-title">Estamos para ayudarte en lo que necesites.</p>
			<p className="cm-support-text">Escríbenos por WhatsApp o por correo: del otro lado está el equipo de Compago.</p>
			<div className="cm-support-actions">
				<a className="cm-button cm-button-whatsapp" href="https://wa.me/525510033582?text=Hola%2C%20necesito%20ayuda%20con%20Compago." target="_blank" rel="noopener noreferrer">
					<svg className="cm-icon" width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
						<path d="M17.47 14.38c-.3-.15-1.76-.87-2.03-.97-.27-.1-.47-.15-.67.15-.2.3-.77.97-.94 1.16-.17.2-.35.22-.64.08-.3-.15-1.26-.47-2.39-1.48-.88-.79-1.48-1.76-1.65-2.06-.17-.3-.02-.46.13-.61.13-.13.3-.35.45-.52.15-.17.2-.3.3-.5.1-.2.05-.37-.03-.52-.07-.15-.67-1.61-.92-2.21-.24-.58-.49-.5-.67-.51h-.57c-.2 0-.52.07-.79.37-.27.3-1.04 1.02-1.04 2.48 0 1.46 1.07 2.88 1.21 3.07.15.2 2.1 3.2 5.08 4.49.71.31 1.26.49 1.7.63.71.23 1.36.2 1.87.12.57-.09 1.76-.72 2.01-1.41.25-.69.25-1.29.17-1.41-.07-.12-.27-.2-.57-.35zm-5.42 7.4h-.01a9.87 9.87 0 0 1-5.03-1.38l-.36-.21-3.74.98 1-3.65-.24-.37a9.86 9.86 0 0 1-1.51-5.26c0-5.45 4.44-9.88 9.89-9.88 2.64 0 5.12 1.03 6.99 2.9a9.83 9.83 0 0 1 2.89 7c0 5.45-4.44 9.88-9.88 9.880zm8.41-18.3A11.82 11.82 0 0 0 12.05 0C5.5 0 .16 5.34.16 11.89c0 2.1.55 4.14 1.59 5.95L.06 24l6.3-1.65a11.88 11.88 0 0 0 5.68 1.45h.01c6.55 0 11.89-5.34 11.89-11.89a11.82 11.82 0 0 0-3.48-8.41z" />
					</svg>
					WhatsApp +52 55 1003 3582
				</a>
				<a className="cm-button" href="mailto:ayuda@compago.com">
					<svg className="cm-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
						<path d="M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2zM22 7l-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7" />
					</svg>
					ayuda@compago.com
				</a>
			</div>
		</div>
	</aside>;

export const GuideImage = ({src, preview, alt, width, height, caption, variant = 'screen'}) => {
  const [open, setOpen] = useState(false);
  const [view, setView] = useState(null);
  const opener = useRef(null);
  const dialog = useRef(null);
  const viewport = useRef(null);
  const closeButton = useRef(null);
  const fitScale = useRef(1);
  const drag = useRef(null);
  const long = height / width > 1.6;
  const icon = (d, size = 18) => <svg className="cm-icon" width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
			<path d={d} />
		</svg>;
  const ZOOM_IN = 'M11 3a8 8 0 1 0 0 16 8 8 0 0 0 0-16zM21 21l-4.35-4.35M11 8v6M8 11h6';
  const ZOOM_OUT = 'M11 3a8 8 0 1 0 0 16 8 8 0 0 0 0-16zM21 21l-4.35-4.35M8 11h6';
  const FIT = 'M3 7V5a2 2 0 0 1 2-2h2M17 3h2a2 2 0 0 1 2 2v2M21 17v2a2 2 0 0 1-2 2h-2M7 21H5a2 2 0 0 1-2-2v-2';
  const DOWNLOAD = 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3';
  const CLOSE = 'M18 6 6 18M6 6l12 12';
  const clampView = next => {
    const el = viewport.current;
    if (!el) return next;
    const w = width * next.scale;
    const h = height * next.scale;
    const keep = 96;
    const x = w <= el.clientWidth ? (el.clientWidth - w) / 2 : Math.min(keep, Math.max(el.clientWidth - w - keep, next.x));
    const y = h <= el.clientHeight ? (el.clientHeight - h) / 2 : Math.min(keep, Math.max(el.clientHeight - h - keep, next.y));
    return {
      scale: next.scale,
      x,
      y
    };
  };
  const fit = () => {
    const el = viewport.current;
    if (!el) return;
    const scale = long ? Math.min(1, el.clientWidth * 0.94 / width) : Math.min(1, el.clientWidth * 0.94 / width, el.clientHeight * 0.88 / height);
    fitScale.current = scale;
    setView(clampView({
      scale,
      x: (el.clientWidth - width * scale) / 2,
      y: long ? 72 : (el.clientHeight - height * scale) / 2
    }));
  };
  const zoomAt = (factor, cx, cy) => {
    setView(current => {
      const el = viewport.current;
      if (!current || !el) return current;
      const px = cx ?? el.clientWidth / 2;
      const py = cy ?? el.clientHeight / 2;
      const scale = Math.min(Math.max(fitScale.current * 0.5, current.scale * factor), Math.max(1.5, fitScale.current * 6));
      const ratio = scale / current.scale;
      return clampView({
        scale,
        x: px - (px - current.x) * ratio,
        y: py - (py - current.y) * ratio
      });
    });
  };
  const panBy = (dx, dy) => setView(current => current && clampView({
    ...current,
    x: current.x + dx,
    y: current.y + dy
  }));
  const close = () => {
    setOpen(false);
    setView(null);
    opener.current?.focus();
  };
  const show = event => {
    opener.current = event.currentTarget;
    setOpen(true);
  };
  const actions = useRef({});
  actions.current = {
    fit,
    zoomAt,
    panBy,
    close
  };
  useEffect(() => {
    const modal = dialog.current;
    if (!open || !modal) return undefined;
    if (!modal.open) modal.showModal();
    const el = viewport.current;
    actions.current.fit();
    closeButton.current?.focus();
    const onResize = () => actions.current.fit();
    const onKey = event => {
      const {zoomAt: zoom, panBy: pan} = actions.current;
      if (event.key === '+' || event.key === '=') zoom(1.25); else if (event.key === '-' || event.key === '_') zoom(0.8); else if (event.key === '0') actions.current.fit(); else if (event.key === 'ArrowUp') pan(0, 120); else if (event.key === 'ArrowDown') pan(0, -120); else if (event.key === 'ArrowLeft') pan(120, 0); else if (event.key === 'ArrowRight') pan(-120, 0); else return;
      event.preventDefault();
    };
    const onWheel = event => {
      event.preventDefault();
      const rect = el.getBoundingClientRect();
      if (event.ctrlKey || event.metaKey) actions.current.zoomAt(Math.exp(-event.deltaY * 0.0022), event.clientX - rect.left, event.clientY - rect.top); else actions.current.panBy(-event.deltaX, -event.deltaY);
    };
    const root = document.documentElement;
    const overflow = root.style.overflow;
    root.style.overflow = 'hidden';
    window.addEventListener('resize', onResize);
    document.addEventListener('keydown', onKey);
    el?.addEventListener('wheel', onWheel, {
      passive: false
    });
    return () => {
      root.style.overflow = overflow;
      window.removeEventListener('resize', onResize);
      document.removeEventListener('keydown', onKey);
      el?.removeEventListener('wheel', onWheel);
      if (modal.open) modal.close();
    };
  }, [open]);
  const onPointerDown = event => {
    if (event.button !== 0) return;
    drag.current = {
      x: event.clientX,
      y: event.clientY,
      travel: 0
    };
    event.currentTarget.setPointerCapture(event.pointerId);
  };
  const onPointerMove = event => {
    const start = drag.current;
    if (!start) return;
    const dx = event.clientX - start.x;
    const dy = event.clientY - start.y;
    start.travel += Math.abs(dx) + Math.abs(dy);
    start.x = event.clientX;
    start.y = event.clientY;
    panBy(dx, dy);
  };
  const onPointerUp = event => {
    const start = drag.current;
    drag.current = null;
    if (!start || start.travel > 6 || !view) return;
    const rect = viewport.current.getBoundingClientRect();
    const x = event.clientX - rect.left;
    const y = event.clientY - rect.top;
    const inside = x >= view.x && x <= view.x + width * view.scale && y >= view.y && y <= view.y + height * view.scale;
    if (!inside) close();
  };
  const onDoubleClick = event => {
    const rect = viewport.current.getBoundingClientRect();
    if (view && view.scale > fitScale.current * 1.4) fit(); else zoomAt(2.2, event.clientX - rect.left, event.clientY - rect.top);
  };
  const percent = view ? Math.round(view.scale / fitScale.current * 100) : 100;
  const viewer = open && <dialog ref={dialog} className="cm-overlay cm-lightbox" aria-label={alt} onCancel={event => {
    event.preventDefault();
    actions.current.close();
  }} onClick={event => {
    if (!event.target.closest('button, a, .cm-lightbox-viewport')) close();
  }}>
			<div className="cm-overlay-bar">
				<span className="cm-overlay-title">{alt}</span>
				<span className="cm-overlay-tools">
					<button type="button" className="cm-tool" onClick={() => zoomAt(0.8)} aria-label="Alejar" title="Alejar (−)">
						{icon(ZOOM_OUT)}
					</button>
					<button type="button" className="cm-tool cm-tool-text" onClick={fit} aria-label="Ajustar a la pantalla" title="Ajustar a la pantalla (0)">
						{percent}%
					</button>
					<button type="button" className="cm-tool" onClick={() => zoomAt(1.25)} aria-label="Acercar" title="Acercar (+)">
						{icon(ZOOM_IN)}
					</button>
					<button type="button" className="cm-tool" onClick={fit} aria-label="Ajustar a la pantalla" title="Ajustar a la pantalla (0)">
						{icon(FIT)}
					</button>
					<a className="cm-tool" href={src} download aria-label="Descargar imagen" title="Descargar imagen">
						{icon(DOWNLOAD)}
					</a>
					<span className="cm-tool-gap" />
					<button type="button" ref={closeButton} className="cm-tool" onClick={close} aria-label="Cerrar" title="Cerrar (Esc)">
						{icon(CLOSE)}
					</button>
				</span>
			</div>
			<div className="cm-lightbox-viewport" ref={viewport} onPointerDown={onPointerDown} onPointerMove={onPointerMove} onPointerUp={onPointerUp} onPointerCancel={() => {
    drag.current = null;
  }} onDoubleClick={onDoubleClick}>
				{view && <img className="cm-lightbox-img" src={src} alt={alt} width={width} height={height} draggable={false} style={{
    transform: `translate(${view.x}px, ${view.y}px) scale(${view.scale})`
  }} />}
			</div>
			<p className="cm-lightbox-help">Arrastra para moverte · ⌘ o Ctrl + rueda para acercar · Doble clic para ampliar · Clic afuera o Esc para cerrar</p>
		</dialog>;
  if (variant === 'guide') {
    return <figure className="cm-guide">
				<button type="button" className="cm-guide-open" onClick={show} aria-label={`Ver la guía completa: ${alt}`}>
					<img src={preview ?? src} alt={alt} loading="lazy" decoding="async" />
					<span className="cm-guide-button">
						{icon(ZOOM_IN, 17)}
						Ver la guía completa
					</span>
				</button>
				{caption && <figcaption className="cm-figure-caption">{caption}</figcaption>}
				{viewer}
			</figure>;
  }
  return <figure className={variant === 'terminal' ? 'cm-figure cm-figure-terminal' : 'cm-figure'}>
			<button type="button" className="cm-figure-open" onClick={show} aria-label={`Ampliar la imagen: ${alt}`}>
				<img src={preview ?? src} alt={alt} width={width} height={height} loading="lazy" decoding="async" />
				<span className="cm-figure-hint">
					{icon(ZOOM_IN, 15)}
					Ampliar
				</span>
			</button>
			{caption && <figcaption className="cm-figure-caption">{caption}</figcaption>}
			{viewer}
		</figure>;
};

export const GuideVideo = ({src, poster, title, duration, caption}) => {
  const dialog = useRef(null);
  const player = useRef(null);
  const opener = useRef(null);
  const resumeAt = useRef(0);
  const pageOverflow = useRef('');
  const icon = (d, size = 18, fill = false) => <svg className="cm-icon" width={size} height={size} viewBox="0 0 24 24" fill={fill ? 'currentColor' : 'none'} stroke="currentColor" strokeWidth={fill ? 1.6 : 2} strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
			<path d={d} />
		</svg>;
  const PLAY = 'M9 6.5 18.5 12 9 17.5z';
  const MAXIMIZE = 'M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3M16 21h3a2 2 0 0 0 2-2v-3';
  const CLOSE = 'M18 6 6 18M6 6l12 12';
  const open = event => {
    const modal = dialog.current;
    const video = player.current;
    if (!modal || !video || modal.open) return;
    opener.current = event.currentTarget;
    pageOverflow.current = document.documentElement.style.overflow;
    document.documentElement.style.overflow = 'hidden';
    modal.showModal();
    video.currentTime = resumeAt.current;
    video.play().catch(() => {});
    video.focus();
  };
  const onClose = () => {
    const video = player.current;
    if (video) {
      resumeAt.current = video.ended ? 0 : video.currentTime;
      video.pause();
    }
    document.documentElement.style.overflow = pageOverflow.current;
    opener.current?.focus();
  };
  const close = () => {
    if (dialog.current?.open) dialog.current.close();
  };
  const fullscreen = () => {
    const video = player.current;
    if (!video) return;
    video.play().catch(() => {});
    if (video.requestFullscreen) video.requestFullscreen().catch(() => {}); else if (video.webkitEnterFullscreen) video.webkitEnterFullscreen();
  };
  return <figure className="cm-video">
			<button type="button" className="cm-video-frame" onClick={open} aria-label={`Ver el video: ${title}`}>
				<img className="cm-video-thumb" src={poster} alt="" decoding="async" />
				<span className="cm-video-play">{icon(PLAY, 34, true)}</span>
				<span className="cm-video-pill">
					{icon(PLAY, 12, true)}
					Video tutorial
				</span>
				{duration && <span className="cm-video-duration">{duration}</span>}
			</button>
			{caption && <figcaption className="cm-video-caption">{caption}</figcaption>}
			<dialog ref={dialog} className="cm-overlay" aria-label={title} onClose={onClose} onClick={event => {
    if (!event.target.closest('video, button, a')) close();
  }}>
				<div className="cm-theater">
					<div className="cm-overlay-bar">
						<span className="cm-overlay-title">{title}</span>
						<span className="cm-overlay-tools">
							<button type="button" className="cm-tool" onClick={fullscreen} aria-label="Pantalla completa" title="Pantalla completa">
								{icon(MAXIMIZE)}
							</button>
							<button type="button" className="cm-tool" onClick={close} aria-label="Cerrar" title="Cerrar (Esc)">
								{icon(CLOSE)}
							</button>
						</span>
					</div>
					<video ref={player} className="cm-theater-video" src={src} poster={poster} controls playsInline preload="none" tabIndex={-1}>
						Tu navegador no puede reproducir este video.
					</video>
				</div>
			</dialog>
		</figure>;
};

El modo kiosko es para una terminal conectada a un tótem de autopago: tu cliente arma su orden en el tótem y la terminal solo cobra. Mientras está encendido, la terminal muestra una sola pantalla de espera y no deja entrar al menú sin el PIN de salida.

<GuideVideo src="https://docs-media.compago.com/manual/terminal/modo-kiosko/video.mp4" poster="/media/manual/terminal/modo-kiosko/poster.webp" title="Cómo usar el modo kiosko" duration="2:13" caption="Mira el paso a paso y síguelo en tu terminal." />

## Dónde está en la app

* En la pantalla **Nuevo cobro**, toca la **X** de arriba a la izquierda para ir al inicio.
* En el inicio, toca el engrane, arriba a la derecha, para abrir **Configuración**.
* En **Configuración**, bajo **Modos**, toca **Modo kiosko**.

## Antes de empezar

* Necesitas tener la sesión iniciada en la terminal. Cualquier vendedor puede encender el modo.
* Los cobros los envía el tótem, de la misma forma en que los envía otra aplicación. Si quieres ver ese cobro pantalla por pantalla, está en [Cómo cobrar una orden de otra app](/manual/terminal/cobrar-una-orden-de-otra-app).
* Con el modo encendido no se escriben cobros en la terminal ni se abren **Transacciones** o **Configuración**. Si necesitas algo de eso, primero sal del modo.
* El PIN de salida tiene 6 dígitos y lo eliges tú. Decide antes quién de tu equipo lo va a conocer y dónde lo van a anotar: la terminal no lo muestra ni tiene forma de recuperarlo.
* El modo y su PIN son de esta terminal. Si tienes varias terminales con tótem, enciéndelo en cada una.

## Paso a paso

<Steps titleSize="h3">
  <Step title="Entra a «Modo kiosko»" id="paso-1">
    <GuideImage variant="terminal" src="/media/manual/terminal/modo-kiosko/paso-1.webp" preview="/media/manual/terminal/modo-kiosko/paso-1-vista.webp" width={1341} height={2860} alt="Paso 1: la pantalla «Configuración» de la terminal, con la fila «Modo kiosko» marcada bajo «Modos» y su estado, «Apagado»" />

    El modo se enciende desde **Configuración**: en **Nuevo cobro** toca la **X** y, ya en el inicio, el engrane. En el grupo **Modos**, toca **Modo kiosko**.
  </Step>

  <Step title="Enciende el modo" id="paso-2">
    <GuideImage variant="terminal" src="/media/manual/terminal/modo-kiosko/paso-2.webp" preview="/media/manual/terminal/modo-kiosko/paso-2-vista.webp" width={1341} height={2860} alt="Paso 2: la pantalla «Modo kiosko», con el interruptor apagado y marcado, la lista «Con el modo encendido» y la fila «PIN de salida» con «Configurar»" />

    Esta pantalla resume el modo: con él encendido, la terminal solo espera los cobros del tótem y esconde el menú. Toca el interruptor **Modo kiosko**.

    <Tip>Si la terminal ya tiene **PIN de salida**, el modo se enciende en cuanto tocas el interruptor.</Tip>
  </Step>

  <Step title="Elige el PIN de salida" id="paso-3">
    <GuideImage variant="terminal" src="/media/manual/terminal/modo-kiosko/paso-3.webp" preview="/media/manual/terminal/modo-kiosko/paso-3-vista.webp" width={1341} height={2860} alt="Paso 3: la pantalla «PIN de salida» con «Elige un PIN de 6 dígitos», los seis puntos llenos y el botón «Continuar» marcado" />

    Una terminal sin PIN de salida te pide crearlo antes de encender el modo. En **Elige un PIN de 6 dígitos**, escríbelo y toca **Continuar**.

    <Tip>Este PIN es solo del modo kiosko. No es el de **Bloqueo con PIN**.</Tip>
  </Step>

  <Step title="Repite el PIN" id="paso-4">
    <GuideImage variant="terminal" src="/media/manual/terminal/modo-kiosko/paso-4.webp" preview="/media/manual/terminal/modo-kiosko/paso-4-vista.webp" width={1341} height={2860} alt="Paso 4: la pantalla «PIN de salida» con «Repite el PIN», los seis puntos llenos y el botón «Guardar PIN» marcado" />

    En **Repite el PIN**, escribe otra vez los mismos 6 dígitos y toca **Guardar PIN**. Al guardarlo, el modo se enciende.

    <Tip>Anota el PIN en un lugar seguro: la terminal no lo muestra ni tiene forma de recuperarlo.</Tip>
  </Step>

  <Step title="Toca el logo 5 veces" id="paso-5">
    <GuideImage variant="terminal" src="/media/manual/terminal/modo-kiosko/paso-5.webp" preview="/media/manual/terminal/modo-kiosko/paso-5-vista.webp" width={1341} height={2860} alt="Paso 5: la pantalla de espera del modo kiosko, «Elige tu orden en la pantalla principal», con el logo de Compago marcado al pie y la indicación de tocarlo 5 veces" />

    El modo ya está encendido: la terminal muestra **Elige tu orden en la pantalla principal** y espera los cobros del tótem. Para salir, toca 5 veces seguidas el logo de abajo.

    <Tip>Da los cinco toques seguidos, en unos tres segundos. Si tardas más, la cuenta empieza de nuevo.</Tip>
  </Step>

  <Step title="Escribe el PIN de salida" id="paso-6">
    <GuideImage variant="terminal" src="/media/manual/terminal/modo-kiosko/paso-6.webp" preview="/media/manual/terminal/modo-kiosko/paso-6-vista.webp" width={1341} height={2860} alt="Paso 6: la pantalla «PIN de salida» con «Escribe el PIN para salir del modo kiosko», los seis puntos llenos y el botón «Salir del modo kiosko» marcado" />

    Se abre **PIN de salida**. Escribe el PIN que elegiste al encender el modo y toca **Salir del modo kiosko**.

    <Tip>Si abriste esta pantalla sin querer, toca **Cancelar**: se activa a los tres segundos.</Tip>
  </Step>

  <Step title="Vuelve al menú" id="paso-7">
    <GuideImage variant="terminal" src="/media/manual/terminal/modo-kiosko/paso-7.webp" preview="/media/manual/terminal/modo-kiosko/paso-7-vista.webp" width={1341} height={2860} alt="Paso 7: el inicio de la terminal después de salir del modo kiosko, con las ventas del día, los accesos «Cobrar» y «Transacciones» y el engrane de «Configuración» marcado" />

    La terminal regresa al inicio, con el menú de siempre: el modo kiosko quedó apagado y ya puedes cobrar, ver tus transacciones o entrar a **Configuración**.

    <Tip>El PIN de salida queda guardado: la próxima vez, el modo se enciende sin pedirte uno nuevo.</Tip>
  </Step>
</Steps>

## Qué pasa después

* Con el modo encendido, la terminal se queda en la pantalla de espera. Cuando el tótem envía un cobro, abre sola las pantallas para pagarlo.
* Durante ese cobro, la pantalla del plan de pago y la de la tarjeta no muestran la **X** ni **Cancelar**: quien paga no puede salirse del cobro desde la terminal. Si hay que cancelarlo, se cancela desde el tótem.
* Al aprobarse el pago, la terminal vuelve a la pantalla de espera para la siguiente orden. Si en [Integraciones](/manual/terminal/integraciones) apagaste **Volver sola al terminar**, **Pago aprobado** puede quedarse en pantalla hasta que alguien toque el botón para volver.
* Si la terminal se reinicia con el modo encendido, al abrir la app regresa a la pantalla de espera, no al menú.
* Salir del modo lo apaga. Para encenderlo de nuevo, entra a **Modo kiosko** y toca el interruptor: el PIN de salida sigue siendo el mismo.

## Preguntas frecuentes

<AccordionGroup>
  <Accordion title="¿Puedo escribir un cobro en la terminal con el modo encendido?">
    No. Con el modo kiosko la terminal solo cobra lo que envía el tótem, y el resto de las pantallas queda bloqueado. Para escribir un cobro, sal del modo con los cinco toques y tu PIN.
  </Accordion>

  <Accordion title="¿El PIN de salida es el mismo que el de «Bloqueo con PIN»?">
    No, son dos PIN distintos. El de salida solo sirve para dejar el modo kiosko; el de [Bloqueo con PIN](/manual/terminal/bloqueo-con-pin) protege los cobros manuales y las devoluciones. Cambiar uno no cambia el otro.
  </Accordion>

  <Accordion title="¿Cómo cambio el PIN de salida?">
    Con el modo apagado, entra a **Modo kiosko** y toca la fila **PIN de salida**. Elige el PIN nuevo, repítelo y toca **Guardar PIN**.
  </Accordion>

  <Accordion title="¿Qué hago si olvidé el PIN de salida?">
    La terminal no muestra el PIN guardado y no tiene una opción para recuperarlo. Si el modo está encendido y nadie de tu equipo recuerda el PIN, escríbenos: los datos de contacto están al final de esta página.
  </Accordion>

  <Accordion title="¿Mis clientes pueden salir del modo por accidente?">
    Para salir hacen falta cinco toques seguidos sobre el logo y, después, el PIN. Si alguien abre **PIN de salida** sin querer, basta con tocar **Cancelar** para volver a la pantalla de espera.
  </Accordion>
</AccordionGroup>

## Errores comunes

### «El PIN debe tener 6 dígitos»

Tocaste el botón con menos de 6 dígitos escritos. Completa los seis puntos y tócalo otra vez.

### «Los PINs no coinciden»

Al repetir el PIN escribiste uno diferente. La terminal borra el segundo para que lo intentes de nuevo. Si dudas del primero, toca la flecha de arriba a la izquierda y elige otro.

### «PIN incorrecto»

El PIN no es el de salida de esta terminal. Revisa que no estés usando el de **Bloqueo con PIN** o el de otra terminal, y escríbelo de nuevo.

### «Demasiados intentos fallidos. Espera 60 segundos.»

Tras cinco intentos equivocados, la terminal deja de aceptar el PIN durante un minuto y el aviso cuenta los segundos que faltan. Espera a que termine y escribe el PIN correcto.

### Los cinco toques no abren «PIN de salida»

Los toques deben caer sobre el logo, al pie de la pantalla, y seguidos, en unos tres segundos. Si pasa más tiempo entre el primero y el último, la cuenta empieza de nuevo: inténtalo otra vez, más rápido.

## Guía en una imagen

Todos los pasos en una sola imagen, para tenerla a mano o compartirla con tu equipo.

<GuideImage variant="guide" src="/media/manual/terminal/modo-kiosko/guia.webp" preview="/media/manual/terminal/modo-kiosko/guia-vista.webp" width={4560} height={11047} alt="Cómo usar el modo kiosko: todos los pasos en una imagen" caption="Ábrela para acercarte a cada paso o descárgala." />

## Guías relacionadas

<CardGroup cols={2}>
  <Card title="Cobra una orden de otra app" icon="share-from-square" href="/manual/terminal/cobrar-una-orden-de-otra-app">
    Así se paga en la terminal un cobro que llega de fuera.
  </Card>

  <Card title="Integraciones" icon="plug" href="/manual/terminal/integraciones">
    La app a la que vuelve la terminal al terminar un cobro.
  </Card>

  <Card title="Bloqueo con PIN" icon="lock" href="/manual/terminal/bloqueo-con-pin">
    Pide un PIN antes de cobrar o de devolver un cobro.
  </Card>

  <Card title="Modo donativos" icon="heart" href="/manual/terminal/modo-donativos">
    Deja la terminal lista para recibir donativos con montos fijos.
  </Card>
</CardGroup>

## ¿Necesitas ayuda?

<SupportBox />


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.