.app-search {
  position: relative;

  width: min(100%, 560px);
  height: 52px;
}

.app-search__icon {
  position: absolute;
  top: 50%;
  left: 18px;

  width: 20px;
  height: 20px;

  color: var(--vyn-text-secondary);

  transform: translateY(-50%);
  pointer-events: none;
}

.app-search__icon svg {
  width: 100%;
  height: 100%;

  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
}

.app-search__input {
  width: 100%;
  height: 100%;

  padding: 0 18px 0 50px;

  border: 1px solid var(--vyn-border);
  border-radius: var(--vyn-radius-control);

  background: var(--vyn-surface-1);
  color: var(--vyn-text-primary);

  font-size: 14px;

  transition:
    border-color var(--vyn-motion-fast) var(--vyn-ease),
    background-color var(--vyn-motion-fast) var(--vyn-ease);
}

.app-search__input::placeholder {
  color: var(--vyn-text-tertiary);
}

.app-search__input:hover {
  background: var(--vyn-surface-2);
}

.app-search__input:focus {
  border-color: rgba(116, 87, 232, 0.72);
  outline: none;
  background: var(--vyn-surface-2);

  box-shadow: 0 0 0 3px rgba(116, 87, 232, 0.12);
}

.app-launcher {
  display: grid;
  grid-template-columns: repeat(5, 112px);
  justify-content: center;
  gap: 24px 32px;
}

.app-tile {
  display: flex;
  flex-direction: column;
  align-items: center;

  width: 112px;
  min-height: 120px;
  padding: 8px 4px;

  border-radius: 18px;

  background: transparent;
  color: var(--vyn-text-body);

  text-align: center;
  cursor: pointer;

  transition:
    transform var(--vyn-motion-base) var(--vyn-ease),
    background-color var(--vyn-motion-base) var(--vyn-ease),
    opacity var(--vyn-motion-base) var(--vyn-ease);
}

.app-tile:hover:not(:disabled) {
  background: var(--vyn-surface-1);
  transform: translateY(-3px);
}

.app-tile:active:not(:disabled) {
  transform: scale(0.97);
}

.app-tile:disabled {
  cursor: default;
}

.app-icon {
  position: relative;

  display: grid;
  place-items: center;

  width: 72px;
  height: 72px;

  margin-bottom: 10px;

  border: 1px solid var(--vyn-border);
  border-radius: var(--vyn-radius-app);

  background: var(--vyn-surface-2);
  color: var(--vyn-text-primary);

  overflow: hidden;

  transition:
    background-color var(--vyn-motion-base) var(--vyn-ease),
    border-color var(--vyn-motion-base) var(--vyn-ease);
}

.app-icon svg {
  width: 32px;
  height: 32px;

  fill: none;
  stroke: currentColor;
  stroke-width: 1.75;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.app-icon--whatsapp {
  background: rgba(116, 87, 232, 0.16);
  border-color: rgba(116, 87, 232, 0.30);
  color: #c9bdff;
}

.app-icon--notes {
  background: rgba(116, 87, 232, 0.16);
  border-color: rgba(116, 87, 232, 0.30);
  color: #c9bdff;
}

.app-icon--qrcode {
  background: rgba(66, 123, 255, 0.10);
  border-color: rgba(66, 123, 255, 0.22);
  color: #a8c2ff;
}

.app-icon--image {
  background: rgba(255, 255, 255, 0.055);
}

.app-icon--receipt {
  background: rgba(255, 255, 255, 0.055);
}

.app-tile--available:hover .app-icon {
  border-color: rgba(116, 87, 232, 0.52);
  background: rgba(116, 87, 232, 0.22);
}

.app-tile__name {
  max-width: 100%;

  color: var(--vyn-text-body);

  font-size: 13px;
  font-weight: 500;
  line-height: 18px;
}

.app-tile__status {
  margin-top: 3px;

  color: var(--vyn-text-tertiary);

  font-size: 10px;
  font-weight: 500;
  line-height: 14px;
}

.app-tile--coming-soon {
  opacity: 0.55;
}

.launcher-empty {
  margin: 32px 0 0;

  color: var(--vyn-text-secondary);

  font-size: 14px;
  text-align: center;
}

@media (max-width: 1023px) {
  .app-launcher {
    grid-template-columns: repeat(5, 104px);
    gap: 24px 20px;
  }

  .app-tile {
    width: 104px;
    min-height: 112px;
  }

  .app-icon {
    width: 68px;
    height: 68px;
  }

  .app-icon svg {
    width: 30px;
    height: 30px;
  }
}

@media (max-width: 767px) {
  .app-launcher {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 24px 16px;

    width: 100%;
    max-width: 320px;
    margin: 0 auto;
  }

  .app-tile {
    width: 100%;
    min-height: 104px;
  }

  .app-icon {
    width: 64px;
    height: 64px;
    border-radius: 18px;
  }

  .app-icon svg {
    width: 28px;
    height: 28px;
  }
}
@media (max-width: 767px) {
  .app-launcher > :last-child:nth-child(odd) {
    grid-column: 1 / -1;
    justify-self: center;
  }
}

/* VYN.APPS TOAST START */

.vyn-toast-region {
  position: fixed;
  top: calc(
    18px +
    env(safe-area-inset-top)
  );
  right: max(
    18px,
    env(safe-area-inset-right)
  );
  z-index: 80;
  display: flex;
  flex-direction: column;
  gap: 10px;
  width: min(
    390px,
    calc(100vw - 36px)
  );
  pointer-events: none;
}

.vyn-toast {
  --vyn-toast-accent: #7c8cff;

  position: relative;
  display: grid;
  grid-template-columns:
    minmax(0, 1fr)
    auto;
  align-items: start;
  gap: 14px;
  width: 100%;
  overflow: hidden;
  padding: 14px 14px 14px 16px;
  border: 1px solid
    rgba(255, 255, 255, 0.12);
  border-radius: 14px;
  background:
    rgba(24, 24, 31, 0.96);
  color: #f7f7fa;
  box-shadow:
    0 16px 44px
    rgba(0, 0, 0, 0.28);
  opacity: 0;
  transform:
    translateX(14px);
  transition:
    opacity 160ms ease,
    transform 160ms ease;
  pointer-events: auto;
  -webkit-backdrop-filter:
    blur(16px);
  backdrop-filter:
    blur(16px);
}

.vyn-toast::before {
  content: "";
  position: absolute;
  inset:
    0 auto 0 0;
  width: 3px;
  background:
    var(--vyn-toast-accent);
}

.vyn-toast.is-visible {
  opacity: 1;
  transform: translateX(0);
}

.vyn-toast.is-leaving {
  opacity: 0;
  transform: translateX(8px);
}

.vyn-toast--success {
  --vyn-toast-accent: #45c486;
}

.vyn-toast--warning {
  --vyn-toast-accent: #f0b84c;
}

.vyn-toast--error {
  --vyn-toast-accent: #ee6868;
}

.vyn-toast__content {
  min-width: 0;
  padding:
    2px 0;
}

.vyn-toast__message {
  margin: 0;
  color: inherit;
  font: inherit;
  font-size: 0.93rem;
  line-height: 1.45;
  overflow-wrap: anywhere;
}

.vyn-toast__controls {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 28px;
}

.vyn-toast__action,
.vyn-toast__close {
  border: 0;
  color: inherit;
  font: inherit;
  cursor: pointer;
}

.vyn-toast__action {
  padding: 6px 8px;
  border-radius: 8px;
  background:
    rgba(255, 255, 255, 0.08);
  font-size: 0.82rem;
  font-weight: 600;
  white-space: nowrap;
}

.vyn-toast__action:hover,
.vyn-toast__action:focus-visible {
  background:
    rgba(255, 255, 255, 0.14);
}

.vyn-toast__action:disabled {
  cursor: default;
  opacity: 0.55;
}

.vyn-toast__close {
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  padding: 0;
  border-radius: 50%;
  background: transparent;
  font-size: 1.35rem;
  line-height: 1;
  opacity: 0.72;
}

.vyn-toast__close:hover,
.vyn-toast__close:focus-visible {
  background:
    rgba(255, 255, 255, 0.08);
  opacity: 1;
}

.vyn-toast__action:focus-visible,
.vyn-toast__close:focus-visible {
  outline:
    2px solid
    var(--vyn-toast-accent);
  outline-offset: 2px;
}

@media (max-width: 767px) {
  .vyn-toast-region {
    top: auto;
    right: auto;
    bottom: calc(
      14px +
      env(safe-area-inset-bottom)
    );
    left: 50%;
    width: min(
      420px,
      calc(100vw - 24px)
    );
    transform:
      translateX(-50%);
    flex-direction:
      column-reverse;
  }

  .vyn-toast {
    border-radius: 13px;
    padding:
      13px 12px 13px 15px;
    transform:
      translateY(12px);
  }

  .vyn-toast.is-visible {
    transform:
      translateY(0);
  }

  .vyn-toast.is-leaving {
    transform:
      translateY(8px);
  }

  .vyn-toast__message {
    font-size: 0.9rem;
  }
}

@media (
  prefers-reduced-motion:
  reduce
) {
  .vyn-toast {
    transition: none;
  }
}

/* VYN.APPS TOAST END */

/* BEGIN VYN.APPS CONFIRM DIALOG */

.vyn-confirm-open {
  overflow: hidden;
}

.vyn-confirm-layer {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: grid;
  place-items: center;
  padding:
    max(20px, env(safe-area-inset-top))
    max(20px, env(safe-area-inset-right))
    max(20px, env(safe-area-inset-bottom))
    max(20px, env(safe-area-inset-left));
  background: rgb(11 11 15 / 62%);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  animation:
    vyn-confirm-backdrop-in
    160ms
    ease-out;
}

.vyn-confirm {
  width: min(100%, 440px);
  border:
    1px solid
    rgb(11 11 15 / 10%);
  border-radius: 22px;
  background: #ffffff;
  color: #0b0b0f;
  box-shadow:
    0 24px 80px
    rgb(0 0 0 / 28%);
  overflow: hidden;
  animation:
    vyn-confirm-dialog-in
    180ms
    cubic-bezier(
      0.2,
      0.8,
      0.2,
      1
    );
}

.vyn-confirm__content {
  display: grid;
  gap: 14px;
  padding: 24px;
}

.vyn-confirm__title {
  margin: 0;
  color: #0b0b0f;
  font-size: 1.12rem;
  font-weight: 700;
  line-height: 1.3;
}

.vyn-confirm__message {
  margin: 0;
  color:
    rgb(11 11 15 / 70%);
  font-size: 0.95rem;
  line-height: 1.55;
  white-space: pre-line;
}

.vyn-confirm__actions {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  margin-top: 6px;
}

.vyn-confirm__button {
  min-height: 44px;
  border:
    1px solid transparent;
  border-radius: 12px;
  padding: 10px 16px;
  font: inherit;
  font-weight: 650;
  line-height: 1.2;
  cursor: pointer;
  transition:
    transform 120ms ease,
    background-color 120ms ease,
    border-color 120ms ease,
    box-shadow 120ms ease;
}

.vyn-confirm__button:focus-visible {
  outline: 3px solid
    rgb(25 103 210 / 28%);
  outline-offset: 2px;
}

.vyn-confirm__button:active {
  transform: translateY(1px);
}

.vyn-confirm__button--cancel {
  border-color:
    rgb(11 11 15 / 13%);
  background:
    rgb(11 11 15 / 4%);
  color: #0b0b0f;
}

.vyn-confirm__button--cancel:hover {
  background:
    rgb(11 11 15 / 8%);
}

.vyn-confirm__button--confirm {
  background: #0b0b0f;
  color: #ffffff;
}

.vyn-confirm__button--confirm:hover {
  background: #26262d;
}

.vyn-confirm__button--danger {
  background: #b42318;
  color: #ffffff;
}

.vyn-confirm__button--danger:hover {
  background: #912018;
}

@keyframes vyn-confirm-backdrop-in {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@keyframes vyn-confirm-dialog-in {
  from {
    opacity: 0;
    transform:
      translateY(8px)
      scale(0.985);
  }

  to {
    opacity: 1;
    transform:
      translateY(0)
      scale(1);
  }
}

@media (max-width: 767px) {
  .vyn-confirm-layer {
    padding:
      max(16px, env(safe-area-inset-top))
      max(16px, env(safe-area-inset-right))
      max(16px, env(safe-area-inset-bottom))
      max(16px, env(safe-area-inset-left));
  }

  .vyn-confirm {
    width: 100%;
    max-width: 420px;
    border-radius: 20px;
  }

  .vyn-confirm__content {
    padding: 22px 20px;
  }

  .vyn-confirm__actions {
    display: grid;
    grid-template-columns:
      1fr
      1fr;
  }

  .vyn-confirm__button {
    width: 100%;
    min-height: 48px;
  }
}

@media (max-width: 390px) {
  .vyn-confirm__actions {
    grid-template-columns:
      1fr;
  }

  .vyn-confirm__button--cancel {
    order: 2;
  }

  .vyn-confirm__button--confirm {
    order: 1;
  }
}

@media (prefers-reduced-motion: reduce) {
  .vyn-confirm-layer,
  .vyn-confirm {
    animation: none;
  }

  .vyn-confirm__button {
    transition: none;
  }
}

/* END VYN.APPS CONFIRM DIALOG */
