/* Roster IdP auth flow — Pocket ID / ssoguard–inspired shell (Phase A UX only) */

:root {
  --auth-zinc-50: #fafafa;
  --auth-zinc-100: #f4f4f5;
  --auth-zinc-200: #e4e4e7;
  --auth-zinc-300: #d4d4d8;
  --auth-zinc-400: #a1a1aa;
  --auth-zinc-500: #71717a;
  --auth-zinc-600: #52525b;
  --auth-zinc-700: #3f3f46;
  --auth-zinc-800: #27272a;
  --auth-zinc-900: #18181b;
  --auth-zinc-950: #09090b;

  --auth-bg: var(--auth-zinc-50);
  --auth-card: #ffffff;
  --auth-card-glass: rgba(255, 255, 255, 0.78);
  --auth-text: var(--auth-zinc-900);
  --auth-muted: var(--auth-zinc-500);
  --auth-border: var(--auth-zinc-200);
  --auth-border-hover: var(--auth-zinc-300);
  --auth-accent: var(--bs-primary, #0d6efd);
  --auth-danger: #dc2626;
  --auth-danger-bg: #fef2f2;
  --auth-warn: #d97706;
  --auth-warn-bg: #fffbeb;
  --auth-ok: #16a34a;
  --auth-ok-bg: #f0fdf4;

  --auth-radius: 0.75rem;
  --auth-radius-sm: 0.5rem;
  --auth-radius-lg: 1rem;
  --auth-radius-pill: 999px;

  --auth-font: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif;
  --auth-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --auth-ease-spring: cubic-bezier(0.16, 1, 0.3, 1);
  --auth-ease-out: cubic-bezier(0.22, 1, 0.36, 1);

  --auth-focus: 0 0 0 3px color-mix(in srgb, var(--auth-accent) 28%, transparent);
  --auth-shadow: 0 1px 2px rgba(0, 0, 0, 0.04), 0 8px 24px rgba(0, 0, 0, 0.06);
  --auth-shadow-lg: 0 2px 6px rgba(0, 0, 0, 0.05), 0 16px 40px rgba(0, 0, 0, 0.1);
  --auth-panel-width: 40.625rem; /* 650px — Pocket ID login column */
  --auth-hero-inset: 1.5rem;
  --auth-hero-radius: 40px;
}

[data-bs-theme="dark"] {
  --auth-bg: var(--auth-zinc-950);
  --auth-card: var(--auth-zinc-900);
  --auth-card-glass: rgba(24, 24, 27, 0.82);
  --auth-text: var(--auth-zinc-50);
  --auth-muted: var(--auth-zinc-400);
  --auth-border: rgba(255, 255, 255, 0.1);
  --auth-border-hover: rgba(255, 255, 255, 0.16);
  --auth-danger: #f87171;
  --auth-danger-bg: #450a0a;
  --auth-warn: #fbbf24;
  --auth-warn-bg: #422006;
  --auth-ok: #4ade80;
  --auth-ok-bg: #052e16;
  --auth-shadow: 0 1px 2px rgba(0, 0, 0, 0.35), 0 12px 32px rgba(0, 0, 0, 0.32);
  --auth-shadow-lg: 0 2px 8px rgba(0, 0, 0, 0.4), 0 20px 48px rgba(0, 0, 0, 0.45);
}

/* ── Keyframes ── */

@keyframes auth-stage-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes auth-card-in {
  from { opacity: 0; transform: translateY(14px) scale(0.985); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes auth-hero-in {
  from { opacity: 0; transform: scale(1.06); }
  to { opacity: 1; transform: scale(1); }
}

@keyframes auth-step-in {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

/* ── Stage / panel / hero (Pocket-like) ── */

body.auth-app-shell {
  min-height: 100vh;
  min-height: 100dvh;
  margin: 0;
  display: flex;
  flex-direction: column;
  background: var(--auth-bg);
  color: var(--bs-body-color, var(--auth-text));
  font-family: var(--auth-font);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
}

body.auth-app-shell.auth-flow-enter .auth-stage {
  animation: auth-stage-in 280ms var(--auth-ease-out) both;
}

body.auth-app-shell.auth-flow-enter .auth-app-card,
body.auth-app-shell.auth-flow-enter .auth-home-sheet {
  animation: auth-card-in 0.42s var(--auth-ease-spring) both;
}

.auth-stage {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 1 1 auto;
  min-height: 100vh;
  min-height: 100dvh;
  width: 100%;
  overflow: hidden;
}

.auth-panel {
  position: relative;
  z-index: 2;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  padding:
    max(1.25rem, env(safe-area-inset-top))
    max(1rem, env(safe-area-inset-right))
    max(1.25rem, env(safe-area-inset-bottom))
    max(1rem, env(safe-area-inset-left));
}

.auth-shell {
  width: 100%;
  max-width: 26rem;
}

.auth-hero {
  display: none;
}

.auth-brand {
  margin: 0 0 1.25rem;
  text-align: center;
}

.auth-brand img {
  height: auto;
  max-width: 11rem;
  width: 130px;
}

.auth-help {
  margin-top: 1rem;
  margin-bottom: 0.5rem;
  text-align: center;
}

/* Soft depth / glass card (legacy .auth-app-card); homescreen uses .auth-home-sheet */
body.auth-app-shell .auth-app-card.card {
  border-radius: var(--auth-radius-lg);
  border: 1px solid var(--auth-border);
  background: var(--auth-card-glass);
  backdrop-filter: blur(14px) saturate(1.15);
  -webkit-backdrop-filter: blur(14px) saturate(1.15);
  box-shadow: var(--auth-shadow-lg);
}

body.auth-app-shell .auth-app-card > .card-body {
  padding: clamp(1.35rem, 3.5vw, 1.85rem);
}

/* Homescreen sheet: no Bootstrap card chrome (auth-home.css owns look) */
body.auth-app-shell .auth-home-sheet {
  border: none;
  background: transparent;
  box-shadow: none;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

body.auth-app-shell .auth-home-body {
  padding: 0;
}

/* Desktop split — Pocket ID: 650px form column, image fills the rest */
@media (min-width: 1024px) {
  body.auth-app-shell.auth-has-hero .auth-stage {
    display: flex;
    flex-direction: row;
    justify-content: stretch;
    align-items: stretch;
  }

  body.auth-app-shell.auth-form-right.auth-has-hero .auth-stage {
    flex-direction: row-reverse;
  }

  body.auth-app-shell.auth-has-hero .auth-panel {
    width: var(--auth-panel-width);
    flex: 0 0 var(--auth-panel-width);
    max-width: var(--auth-panel-width);
    height: 100vh;
    height: 100dvh;
    padding: 4rem;
  }

  body.auth-app-shell.auth-has-hero .auth-shell {
    max-width: min(24rem, 100%);
  }

  body.auth-app-shell.auth-has-hero .auth-hero {
    display: flex;
    position: relative;
    z-index: 1;
    flex: 1 1 auto;
    min-width: 0;
    align-self: stretch;
    height: auto;
    min-height: 100%;
    padding: var(--auth-hero-inset);
    pointer-events: none;
    top: auto;
    right: auto;
    bottom: auto;
    left: auto;
  }

  body.auth-app-shell.auth-has-hero .auth-hero-frame {
    position: relative;
    flex: 1 1 auto;
    width: 100%;
    height: 100%;
    min-height: 0;
    border-radius: var(--auth-hero-radius);
    overflow: hidden;
    background-color: var(--auth-zinc-900);
  }

  [data-bs-theme="light"] body.auth-app-shell.auth-has-hero .auth-hero-frame {
    background-color: var(--auth-zinc-100);
  }

  body.auth-app-shell.auth-has-hero .auth-hero-image {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    display: block;
  }

  body.auth-app-shell.auth-has-hero .auth-hero-pattern {
    position: absolute;
    inset: 0;
    pointer-events: none;
    opacity: 0.18;
    background-image:
      linear-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px),
      linear-gradient(90deg, rgba(255, 255, 255, 0.06) 1px, transparent 1px);
    background-size: 28px 28px;
    mask-image: radial-gradient(ellipse at center, #000 35%, transparent 78%);
  }

  [data-bs-theme="light"] body.auth-app-shell.auth-has-hero .auth-hero-pattern {
    opacity: 0.28;
    background-image:
      linear-gradient(rgba(24, 24, 27, 0.06) 1px, transparent 1px),
      linear-gradient(90deg, rgba(24, 24, 27, 0.06) 1px, transparent 1px);
  }

  body.auth-app-shell.auth-flow-enter.auth-has-hero .auth-hero-frame {
    animation: auth-hero-in 0.85s var(--auth-ease-out) both;
  }

  /* Soft transparent card on split desktop */
  body.auth-app-shell.auth-has-hero .auth-app-card.card,
  body.auth-app-shell.auth-has-hero .auth-home-sheet {
    border: none;
    box-shadow: none;
    background: transparent;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
  }

  body.auth-app-shell.auth-has-hero .auth-app-card > .card-body,
  body.auth-app-shell.auth-has-hero .auth-home-body {
    padding: 0;
  }
}

@media (min-width: 1536px) {
  :root { --auth-panel-width: 50rem; } /* 800px — Pocket 2xl */
}

/* Phone / tablet — Pocket: image is the page background, form is a card */
@media (max-width: 1023px) {
  .auth-hero { display: none !important; }

  .auth-panel {
    min-height: 100dvh;
  }

  body.auth-app-shell.auth-has-hero .auth-stage {
    background-color: var(--auth-bg);
    background-image: var(--auth-hero-image);
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
  }

  body.auth-app-shell.auth-has-hero .auth-panel {
    background: transparent;
  }

  body.auth-app-shell.auth-has-hero .auth-shell {
    max-width: 28rem;
    margin-inline: 0.75rem;
  }

  body.auth-app-shell.auth-has-hero .auth-app-card.card,
  body.auth-app-shell.auth-has-hero .auth-home-sheet {
    background: var(--auth-card);
    border-radius: 1.25rem;
    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.22);
    border: 1px solid var(--auth-border);
  }

  body.auth-app-shell.auth-has-hero .auth-app-card > .card-body,
  body.auth-app-shell.auth-has-hero .auth-home-body {
    padding: 1.5rem 1.25rem;
  }
}

@media (max-width: 480px) {
  body.auth-app-shell:not(.auth-has-hero) .auth-panel {
    padding: 0;
    align-items: stretch;
  }

  body.auth-app-shell:not(.auth-has-hero) .auth-shell {
    max-width: none;
    min-height: 100dvh;
    display: flex;
    flex-direction: column;
    justify-content: center;
  }

  body.auth-app-shell .auth-brand {
    margin-bottom: 1rem;
  }

  body.auth-app-shell:not(.auth-has-hero) .auth-app-card.card {
    border: none;
    border-radius: 0;
    box-shadow: none;
    background: var(--auth-bg);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    min-height: auto;
  }

  body.auth-app-shell:not(.auth-has-hero) .auth-app-card > .card-body {
    padding: max(1.25rem, env(safe-area-inset-top)) 1.25rem max(1.25rem, env(safe-area-inset-bottom));
  }

  body.auth-app-shell:not(.auth-has-hero) .auth-home-sheet {
    background: transparent;
  }

  body.auth-app-shell.auth-has-hero .auth-panel {
    padding: 1rem 0.75rem;
    align-items: center;
  }

  body.auth-app-shell.auth-has-hero .auth-shell {
    max-width: 28rem;
    min-height: auto;
  }

  body.auth-app-shell .auth-help {
    padding-bottom: max(0.75rem, env(safe-area-inset-bottom));
  }
}

@media (min-width: 481px) and (max-width: 1023px) {
  body.auth-app-shell .auth-shell {
    max-width: 28rem;
  }

  body.auth-app-shell .auth-app-card > .card-body {
    padding: 2rem 1.75rem 1.75rem;
  }
}

@media (min-width: 481px) and (max-height: 640px) {
  body.auth-app-shell .auth-panel {
    padding-block: 0.75rem;
  }

  body.auth-app-shell .auth-brand {
    margin-bottom: 0.75rem;
  }
}

/* Non-shell auth pages still get calm vertical centering via legacy container */
body:not(.auth-app-shell) > .container {
  padding-top: clamp(0.75rem, 3vw, 1.75rem);
  padding-bottom: clamp(0.75rem, 4vw, 2rem);
}

/* ── Sign-in SPA density (moved from layout inline) ── */

body.auth-app-shell .signin-flow-title {
  font-size: 1.35rem;
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1.25;
}

body.auth-app-shell .signin-flow-subtitle {
  color: var(--bs-secondary-color, var(--auth-muted));
  font-size: 0.9375rem;
  line-height: 1.45;
}

body.auth-app-shell .signin-step-track {
  display: flex;
  gap: 0.4rem;
  align-items: stretch;
}

body.auth-app-shell .signin-step-track .seg {
  flex: 1;
  height: 4px;
  border-radius: 4px;
  background-color: var(--bs-border-color, var(--auth-border));
  transition: background-color 0.32s var(--auth-ease), opacity 0.32s ease, transform 0.32s var(--auth-ease);
}

body.auth-app-shell .signin-step-track .seg.is-active {
  background-color: var(--bs-primary, var(--auth-accent));
  transform: scaleY(1.15);
}

body.auth-app-shell .signin-step-track .seg.is-done {
  background-color: var(--bs-primary, var(--auth-accent));
  opacity: 0.55;
}

body.auth-app-shell .signin-step-labels {
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--bs-secondary-color, var(--auth-muted));
}

body.auth-app-shell .signin-identity-box {
  font-size: 0.95rem;
  font-weight: 500;
  background-color: var(--bs-tertiary-bg);
  border: 1px solid var(--bs-border-color-translucent, var(--auth-border));
}

body.auth-app-shell .signin-code-input {
  font-size: 1.5rem;
  font-weight: 600;
  letter-spacing: 0.42em;
  padding-left: 1rem;
  padding-right: 0.5rem;
  font-variant-numeric: tabular-nums;
  min-height: 3.35rem;
}

/* First panel only gets entrance; step changes use transition classes */
body.auth-app-shell .signin-vue-root.is-first-paint .signin-step-panel {
  animation: auth-step-in 0.32s var(--auth-ease) both;
}

body.auth-app-shell .signin-fade-enter-active,
body.auth-app-shell .signin-fade-leave-active {
  transition: opacity 0.2s var(--auth-ease), transform 0.24s var(--auth-ease);
}

body.auth-app-shell .signin-fade-enter-from {
  opacity: 0;
  transform: translateY(8px);
}

body.auth-app-shell .signin-fade-leave-to {
  opacity: 0;
  transform: translateY(-4px);
}

body.auth-app-shell .btn {
  transition:
    transform 0.14s var(--auth-ease-spring),
    box-shadow 0.2s ease,
    background-color 0.2s ease,
    border-color 0.2s ease,
    color 0.2s ease,
    opacity 0.2s ease;
}

body.auth-app-shell .btn:active:not(:disabled) {
  transform: scale(0.985);
}

body.auth-app-shell .btn-primary.btn-lg {
  min-height: 3rem;
  font-weight: 600;
}

body.auth-app-shell .signin-status-icon {
  font-size: 2.75rem;
  line-height: 1;
}

body.auth-app-shell .signin-status-icon--success {
  color: var(--bs-success, var(--auth-ok));
}

body.auth-app-shell .signin-text-action {
  color: var(--bs-secondary-color, var(--auth-muted));
  font-size: 0.875rem;
  font-weight: 500;
  text-decoration: none;
}

body.auth-app-shell .signin-text-action:hover,
body.auth-app-shell .signin-text-action:focus-visible {
  color: var(--bs-body-color, var(--auth-text));
  text-decoration: underline;
}

body.auth-app-shell .signin-text-action--btn {
  background: none;
  border: 0;
  padding: 0;
}

body.auth-app-shell .signin-footer-actions .signin-footer-sep {
  margin: 0 0.35rem;
  opacity: 0.55;
}

body.auth-app-shell .signin-turnstile-wrap .signin-turnstile-mount,
body.auth-app-shell .signin-turnstile-wrap .cf-turnstile {
  min-height: 0;
}

/* Consent / logout trust panels */
body.auth-app-shell .auth-trust-hint {
  margin: 0 0 1rem;
  padding: 0.75rem 0.875rem;
  background: color-mix(in srgb, var(--auth-muted) 8%, transparent);
  border: 1px solid var(--auth-border);
  border-radius: var(--auth-radius-sm);
  color: var(--bs-secondary-color, var(--auth-muted));
  font-size: 0.8125rem;
  line-height: 1.45;
  text-align: left;
}

body.auth-app-shell .auth-app-meta {
  border-radius: var(--auth-radius-sm);
  background-color: var(--bs-tertiary-bg);
  border: 1px solid var(--bs-border-color-translucent, var(--auth-border));
  padding: 0.75rem 1rem;
  margin-bottom: 1rem;
}

body.auth-app-shell .oidc-handoff-banner {
  border-radius: var(--auth-radius-sm);
}

/* Destructive subtitle (Pocket: helper XOR error — no toast) */
body.auth-app-shell .signin-flow-subtitle--error {
  color: var(--auth-danger);
  font-weight: 500;
}

body.auth-app-shell .signin-flow-subtitle--ok {
  color: var(--auth-ok);
  font-weight: 500;
}

/* Ceremony mark above title — default / passkey / consent / error */
body.auth-app-shell .signin-ceremony-mark {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: var(--auth-radius);
  border: 1px solid var(--auth-border);
  background: color-mix(in srgb, var(--auth-muted) 6%, transparent);
  color: var(--auth-muted);
  font-size: 1.35rem;
  line-height: 1;
  transition: color 0.2s ease, border-color 0.2s ease, background-color 0.2s ease;
}

body.auth-app-shell .signin-ceremony-mark--passkey,
body.auth-app-shell .signin-ceremony-mark--consent {
  color: var(--auth-accent);
  border-color: color-mix(in srgb, var(--auth-accent) 35%, var(--auth-border));
  background: color-mix(in srgb, var(--auth-accent) 8%, transparent);
}

body.auth-app-shell .signin-ceremony-mark--error {
  color: var(--auth-danger);
  border-color: color-mix(in srgb, var(--auth-danger) 40%, var(--auth-border));
  background: var(--auth-danger-bg);
}

/* Pocket: no progress track / step labels across the whole sign-in SPA */
body.auth-app-shell .signin-step-track,
body.auth-app-shell .signin-step-labels,
body.auth-app-shell .signin-ceremony-mark {
  display: none !important;
}

/* Legacy title class → serif (server pages / any leftover) */
body.auth-app-shell .signin-flow-title {
  font-family: "Source Serif 4", "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, "Times New Roman", serif;
  font-size: clamp(1.85rem, 4.2vw, 2.35rem);
  font-weight: 700;
  letter-spacing: -0.035em;
  line-height: 1.15;
}

/* Optional brand dim when SPA signals ceremony error (Alliance logo stays) */
body.auth-app-shell:has(.signin-vue-root.has-ceremony-error) .auth-brand img {
  opacity: 0.72;
  filter: grayscale(0.15);
  transition: opacity 0.2s ease, filter 0.2s ease;
}

body.auth-app-shell .auth-brand img {
  transition: opacity 0.2s ease, filter 0.2s ease;
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  body.auth-app-shell.auth-flow-enter .auth-stage,
  body.auth-app-shell.auth-flow-enter .auth-app-card,
  body.auth-app-shell.auth-flow-enter .auth-home-sheet,
  body.auth-app-shell.auth-flow-enter.auth-has-hero .auth-hero-frame,
  body.auth-app-shell .signin-vue-root.is-first-paint .signin-step-panel {
    animation: none !important;
  }

  body.auth-app-shell .signin-step-track .seg {
    transition: none;
    transform: none;
  }

  body.auth-app-shell .signin-fade-enter-active,
  body.auth-app-shell .signin-fade-leave-active {
    transition: opacity 0.12s ease;
  }

  body.auth-app-shell .signin-fade-enter-from,
  body.auth-app-shell .signin-fade-leave-to {
    transform: none;
  }

  body.auth-app-shell .btn {
    transition: none;
  }

  body.auth-app-shell .btn:active:not(:disabled) {
    transform: none;
  }
}


/* Residual Bootstrap controls on auth shell → Pocket-ish pills when still used */
body.auth-app-shell .auth-home-body .btn-primary.btn-lg,
body.auth-app-shell .auth-home-body .btn-primary {
  min-height: 3.15rem;
  border: none;
  border-radius: 999px;
  font-weight: 600;
  background: var(--ah-primary, var(--auth-text));
  color: var(--ah-primary-fg, var(--auth-bg));
}

body.auth-app-shell .auth-home-body .btn-outline-secondary,
body.auth-app-shell .auth-home-body .btn-outline-primary {
  min-height: 3.15rem;
  border-radius: 999px;
  font-weight: 600;
  border: none;
  background: var(--ah-fill, var(--auth-zinc-100));
  color: var(--ah-text, var(--auth-text));
}

body.auth-app-shell .auth-home-body .btn-outline-secondary:hover,
body.auth-app-shell .auth-home-body .btn-outline-primary:hover,
body.auth-app-shell .auth-home-body .btn-outline-secondary:focus-visible,
body.auth-app-shell .auth-home-body .btn-outline-primary:focus-visible {
  background: var(--ah-fill-hover, var(--auth-zinc-200));
  color: var(--ah-text, var(--auth-text));
  box-shadow: var(--ah-focus, var(--auth-focus));
}

body.auth-app-shell .auth-home-body .form-control,
body.auth-app-shell .auth-home-body .form-control-lg {
  min-height: 3.15rem;
  border-radius: 1.5rem;
  border: 1px solid transparent;
  background: var(--ah-fill, var(--auth-zinc-100));
  color: var(--ah-text, var(--auth-text));
  font-weight: 500;
}

body.auth-app-shell .auth-home-body .form-control:focus {
  background: var(--ah-fill, var(--auth-zinc-100));
  border-color: transparent;
  box-shadow: var(--ah-focus, var(--auth-focus));
}

/* Hero: no decorative labels / junk chrome */
body.auth-app-shell .auth-hero::before,
body.auth-app-shell .auth-hero::after {
  content: none !important;
}
