:root {
  --channel-width: min(1120px, calc(100vw - 24px));
}

* {
  box-sizing: border-box;
}

html,
body {
  min-height: 100%;
}

body {
  margin: 0;
  font-family: var(--xui-font);
  color: var(--xui-ink);
  background: var(--xui-bg);
  -webkit-text-size-adjust: 100%;
}

.page-shell {
  min-height: 100dvh;
  padding:
    max(var(--xui-space-3), env(safe-area-inset-top))
    max(var(--xui-space-2), env(safe-area-inset-right))
    calc(var(--xui-space-5) + env(safe-area-inset-bottom))
    max(var(--xui-space-2), env(safe-area-inset-left));
  display: grid;
  grid-template-rows: auto minmax(0, 1fr);
  justify-items: center;
  gap: var(--xui-space-2);
  background: var(--xui-bg-shell);
}

.channel-nav,
.channel-view {
  width: var(--channel-width);
  max-width: 100%;
}

.channel-view {
  min-height: 0;
  display: grid;
  grid-template-rows: auto minmax(0, 1fr);
  border: var(--xui-border) solid var(--xui-line-soft);
  border-radius: var(--xui-radius-page);
  background: var(--xui-surface);
  overflow: hidden;
}

.channel-head {
  min-width: 0;
  min-height: 82px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--xui-space-3);
  padding: var(--xui-space-4);
}

.channel-title-block {
  min-width: 0;
}

.channel-eyebrow {
  display: inline-flex;
  align-items: center;
  min-height: var(--xui-control-sm-h);
  padding: 0 var(--xui-space-3);
  border: var(--xui-border) solid var(--xui-line-soft);
  border-radius: var(--xui-radius-control);
  background: var(--xui-accent-soft);
  color: var(--xui-accent);
  font-size: var(--xui-text-xs);
  font-weight: 750;
  letter-spacing: 0;
  text-transform: uppercase;
}

.channel-head h1,
.channel-head p {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.channel-head h1 {
  margin: var(--xui-space-2) 0 0;
  color: var(--xui-ink);
  font-size: var(--xui-text-xl);
  font-weight: 800;
  line-height: 1.2;
}

.channel-head p {
  margin: var(--xui-space-1) 0 0;
  color: var(--xui-ink-muted);
  font-size: var(--xui-text-sm);
}

.channel-icon-button,
.channel-open-button,
.channel-pager button {
  min-height: var(--xui-control-h);
  min-width: var(--xui-control-h);
  border: var(--xui-border) solid var(--xui-line-mid);
  border-radius: var(--xui-radius-small);
  background: var(--xui-surface);
  color: var(--xui-ink);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--xui-space-2);
  padding: 0 var(--xui-space-3);
  font: inherit;
  font-size: var(--xui-text-sm);
  line-height: 1;
  text-decoration: none;
  cursor: pointer;
  transition:
    background-color var(--xui-speed) ease,
    border-color var(--xui-speed) ease;
}

.channel-icon-button:hover,
.channel-open-button:hover,
.channel-pager button:hover {
  background: var(--xui-hover-tint);
}

.channel-icon-button {
  width: var(--xui-control-h);
  min-width: var(--xui-control-h);
  height: var(--xui-control-h);
  min-height: var(--xui-control-h);
  padding: 0;
  border-radius: var(--xui-radius-control);
}

/* body: list area uses bg-quiet so surface cards stand out */
.channel-body {
  min-height: 0;
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto;
  border-top: var(--xui-border) solid var(--xui-line-soft);
  background: var(--xui-bg-quiet);
  overflow: hidden;
}

.channel-list {
  min-height: 0;
  padding: var(--xui-space-2);
  display: grid;
  align-content: start;
  gap: var(--xui-space-2);
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  grid-auto-rows: minmax(224px, auto);
  overflow: auto;
}

.channel-list.is-empty {
  align-content: stretch;
  grid-template-columns: 1fr;
  grid-auto-rows: 1fr;
}

.channel-card {
  min-width: 0;
  min-height: 224px;
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto;
  gap: var(--xui-space-2);
  padding: var(--xui-space-3);
  border: var(--xui-border) solid var(--xui-line-soft);
  border-radius: var(--xui-radius-control);
  background: var(--xui-surface);
  color: var(--xui-ink);
  overflow: hidden;
  transition: border-color var(--xui-speed) ease;
}

.channel-card:hover {
  border-color: var(--xui-line-mid);
}

.channel-card-main {
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  gap: var(--xui-space-2);
  color: inherit;
  text-decoration: none;
}

/* thumbnail area: fixed height, default logo centered at 20% opacity */
.channel-card-thumb {
  flex: 0 0 96px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--xui-radius-small);
  background: var(--xui-bg-quiet);
  overflow: hidden;
}

.channel-card-thumb-img {
  width: 58px;
  height: 58px;
  object-fit: contain;
  opacity: 0.2;
}

/* real app icon: full coverage, no opacity */
.channel-card-thumb-img.is-real {
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 1;
}

/* dark theme: invert default placeholder logo */
[data-xui-theme="dark"] .channel-card-thumb-img:not(.is-real) {
  filter: invert(1);
}

.channel-card-info {
  flex: 1;
  min-width: 0;
  display: grid;
  align-content: start;
  gap: var(--xui-space-1);
}

.channel-card-main:hover .channel-card-info strong {
  color: var(--xui-accent);
}

.channel-card-info strong,
.channel-card-info p {
  display: block;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.channel-card-info strong {
  font-size: var(--xui-text-lg);
}

.channel-card-info p {
  margin: 0;
  color: var(--xui-ink-muted);
  font-size: var(--xui-text-sm);
}

.channel-card-badge {
  width: fit-content;
  min-height: var(--xui-control-sm-h);
  display: inline-flex;
  align-items: center;
  padding: 0 var(--xui-space-2);
  border-radius: var(--xui-radius-small);
  background: var(--xui-accent-soft);
  color: var(--xui-accent);
  font-size: var(--xui-text-xs);
  font-weight: 750;
}

/* card footer: divider spans full card width via negative margins; card must have overflow:hidden */
.channel-card-footer {
  min-width: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--xui-space-2);
  margin: 0 calc(-1 * var(--xui-space-3)) calc(-1 * var(--xui-space-3));
  padding: var(--xui-space-2) var(--xui-space-3) var(--xui-space-3);
  border-top: var(--xui-border) solid var(--xui-line-soft);
}

.channel-card-footer small {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--xui-ink-soft);
  font-size: var(--xui-text-sm);
}

.channel-open-button {
  flex: 0 0 auto;
}

.channel-empty,
.channel-wait,
.channel-error {
  min-height: 240px;
  display: grid;
  place-items: center;
  align-content: center;
  gap: var(--xui-space-2);
  color: var(--xui-ink-muted);
  font-size: var(--xui-text-sm);
}

.channel-empty i {
  color: var(--xui-ink-soft);
  font-size: 2rem;
}

.channel-wait i {
  color: var(--xui-accent);
  font-size: 2rem;
}

.channel-pager {
  min-height: 52px;
  min-width: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--xui-space-2);
  padding: var(--xui-space-2);
  border-top: var(--xui-border) solid var(--xui-line-soft);
  background: var(--xui-surface);
  color: var(--xui-ink-muted);
  font-size: var(--xui-text-sm);
}

.channel-pager span {
  white-space: nowrap;
}

.channel-pager button:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

.channel-pager button:disabled:hover {
  background: var(--xui-surface);
}

.channel-toast {
  position: fixed;
  left: 50%;
  bottom: calc(22px + env(safe-area-inset-bottom));
  z-index: 50;
  transform: translate(-50%, 12px);
  min-width: 148px;
  max-width: calc(100vw - 32px);
  opacity: 0;
  pointer-events: none;
  padding: var(--xui-space-3) var(--xui-space-4);
  border: var(--xui-border) solid var(--xui-line-mid);
  border-radius: var(--xui-radius-control);
  background: var(--xui-surface);
  color: var(--xui-ink);
  font-size: var(--xui-text-md);
  text-align: center;
  transition: opacity var(--xui-speed) ease, transform var(--xui-speed) ease;
}

.channel-toast.is-visible {
  opacity: 1;
  transform: translate(-50%, 0);
}

@media (max-width: 720px) {
  .channel-head {
    min-height: 78px;
    padding: var(--xui-space-3);
  }

  .channel-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    grid-auto-rows: minmax(200px, auto);
  }

  .channel-card {
    min-height: 200px;
  }

  .channel-card-thumb {
    flex-basis: 76px;
  }

  .channel-card-thumb-img {
    width: 46px;
    height: 46px;
  }
}
