/*
 * This is a manifest file that'll be compiled into application.css.
 */

/* Shared product theme. Local component tokens reference these values so every
   workspace, public page, and dialog follows the same light/dark preference. */
:root {
  --mir-bg: #e5e7eb;
  --mir-surface: #f5f6f8;
  --mir-subtle: #dce0e6;
  --mir-text: #171a21;
  --mir-muted: #414956;
  --mir-border: #b8c0cc;
  --mir-brand: #3b82f6;
  --mir-accent: #1d4ed8;
  --mir-accent-soft: #e0eaff;
  --mir-action: #2563eb;
  --mir-action-hover: #1d4ed8;
  --mir-action-text: #fff;
  --mir-danger: #b33e3e;
  --mir-danger-hover: #952f32;
  --mir-danger-text: #fff;
  --mir-danger-soft: #f4e5e0;
  --mir-danger-action: #b91c1c;
  --mir-danger-action-hover: #991b1b;
  --mir-success: #397150;
  --mir-success-soft: #e2ece1;
  --mir-warning: #886019;
  --mir-warning-soft: #f1e8d5;
  --mir-chart-secondary: #8b6c3c;
  --mir-focus-halo: rgb(59 130 246 / 22%);
  --mir-overlay: rgb(17 24 39 / 45%);
  --mir-shadow: 0 1px 3px rgb(17 24 39 / 8%);
  --mir-shadow-popover: 0 16px 48px rgb(17 24 39 / 20%);
  --mir-radius-sm: 6px;
  --mir-radius: 8px;
  --mir-radius-lg: 12px;
}

html.dark {
  --mir-bg: #181818;
  --mir-surface: #252525;
  --mir-subtle: #333333;
  --mir-text: #f5f5f5;
  --mir-muted: #c7c7c7;
  --mir-border: #4a4a4a;
  --mir-accent: #6aa6ff;
  --mir-accent-soft: #182d4b;
  --mir-action: var(--mir-brand);
  --mir-action-hover: #5292ff;
  --mir-action-text: #07111f;
  --mir-danger: #f0a29b;
  --mir-danger-hover: #f4b9b3;
  --mir-danger-text: #351c1b;
  --mir-danger-soft: #412c2b;
  --mir-danger-action: #dc2626;
  --mir-danger-action-hover: #b91c1c;
  --mir-success: #a3cda6;
  --mir-success-soft: #2b3c31;
  --mir-warning: #d8bb81;
  --mir-warning-soft: #3e3729;
  --mir-chart-secondary: #d8bb81;
  --mir-focus-halo: rgb(59 130 246 / 28%);
  --mir-overlay: rgb(0 0 0 / 65%);
  --mir-shadow: 0 1px 3px rgb(0 0 0 / 22%);
  --mir-shadow-popover: 0 16px 48px rgb(0 0 0 / 40%);
}

html { background-color: var(--mir-bg); }
body { -webkit-font-smoothing: antialiased; }
::selection { color: var(--mir-text); background: var(--mir-accent-soft); }

/* Legacy utility templates use this tone for readable hints and timestamps. */
:where(.admin-workspace, .customer-dashboard, .mir-managed-shell) .text-stone-400 {
  color: var(--mir-muted);
}

/* Explicit placeholder colors avoid the browser/preflight's faded defaults. */
:where(.admin-workspace, .customer-dashboard, .mir-managed-shell, .public-site, .schedule-page, .inbox-workspace) :is(input, textarea)::placeholder {
  color: var(--mir-muted);
  opacity: 1;
}

:where(.admin-workspace, .customer-dashboard, .mir-managed-shell, .public-site, .schedule-page, .inbox-workspace) input:is([type="checkbox"], [type="radio"]) {
  accent-color: var(--mir-action);
}

/* UA / Tailwind preflight leave buttons as cursor:default — restore the hand. */
button:not(:disabled),
input[type="button"]:not(:disabled),
input[type="submit"]:not(:disabled),
input[type="reset"]:not(:disabled),
summary,
[role="button"]:not([aria-disabled="true"]) {
  cursor: pointer;
}

button:disabled,
input[type="button"]:disabled,
input[type="submit"]:disabled,
input[type="reset"]:disabled,
[role="button"][aria-disabled="true"] {
  cursor: not-allowed;
}

/* Dashboard Clean AI badge — dismissed preference is stored on <html> before paint. */
html.mir-clean-ai-badge-dismissed .mir-clean-ai-badge {
  display: none;
}

/* Skip link (WCAG 2.4.1) — first child of <body> in every layout. Off-screen
   until focused, then pinned top-left so keyboard users can jump past the nav. */
.mir-skip-link {
  position: absolute;
  left: -9999px;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

.mir-skip-link:focus {
  position: fixed;
  left: 1rem;
  top: 1rem;
  z-index: 100;
  width: auto;
  height: auto;
  overflow: visible;
  padding: 0.5rem 1rem;
  border-radius: 0.75rem;
  background-color: var(--mir-surface);
  color: var(--mir-accent);
  font-size: 0.875rem;
  font-weight: 600;
  line-height: 1.25rem;
  box-shadow: var(--mir-shadow-popover);
  outline: 2px solid var(--mir-accent);
  outline-offset: 2px;
}

/* main carries tabindex="-1" so the skip link lands focus in every browser;
   it isn't interactive, so suppress the ring the programmatic focus would draw. */
main#main:focus {
  outline: none;
}

/* Heroicons via rails_icons — SVGs have no intrinsic size without CSS.
   Tailwind `size-*` often isn't generated for helper args, so pin defaults here. */
svg[data-slot="icon"] {
  display: inline-block;
  width: 1rem;
  height: 1rem;
  flex-shrink: 0;
  vertical-align: middle;
}

svg[data-slot="icon"].size-3,
svg[data-slot="icon"].mir-icon-xs {
  width: 0.75rem;
  height: 0.75rem;
}

svg[data-slot="icon"].size-3\.5,
svg[data-slot="icon"].mir-icon-sm {
  width: 0.875rem;
  height: 0.875rem;
}

svg[data-slot="icon"].size-4 {
  width: 1rem;
  height: 1rem;
}

svg[data-slot="icon"].size-5 {
  width: 1.25rem;
  height: 1.25rem;
}

svg[data-slot="icon"].size-6 {
  width: 1.5rem;
  height: 1.5rem;
}

@keyframes mir-chat-dot {
  0%,
  80%,
  100% {
    opacity: 0.35;
    transform: translateY(0);
  }
  40% {
    opacity: 1;
    transform: translateY(-3px);
  }
}

.mir-chat-typing span {
  display: inline-block;
  width: 0.35rem;
  height: 0.35rem;
  margin-right: 0.2rem;
  border-radius: 9999px;
  background: currentColor;
  animation: mir-chat-dot 1.15s ease-in-out infinite;
}

.mir-chat-typing span:nth-child(2) {
  animation-delay: 0.15s;
}

.mir-chat-typing span:nth-child(3) {
  animation-delay: 0.3s;
  margin-right: 0;
}

@media (prefers-reduced-motion: reduce) {
  .mir-chat-typing span {
    animation: none;
    opacity: 0.65;
  }
}

/* Invitations and OAuth use the same quiet canvas as the workspaces. */
.mir-managed-shell {
  background: var(--mir-bg);
  color: var(--mir-text);
}

.mir-primary-action {
  border-radius: var(--mir-radius);
  background: var(--mir-action);
  color: var(--mir-action-text);
  transition: background-color 150ms ease;
}

.mir-primary-action:hover { background: var(--mir-action-hover); }
.mir-primary-action:focus-visible { outline: 2px solid var(--mir-accent); outline-offset: 3px; }
.mir-invite-hero { background: #1e3a8a; }
html.dark .mir-invite-hero { background: var(--mir-accent-soft); }

@media (prefers-reduced-motion: reduce) {
  .mir-primary-action { transition: none; }
}

/* Shared page-enter motion (dashboard lists, page blocks, auth, marketing) */
.mir-rise {
  animation: mir-auth-rise 0.45s ease-out both;
}

.mir-rise-delayed {
  animation: mir-auth-rise 0.55s ease-out 0.08s both;
}

.mir-rise-list > * {
  animation: mir-auth-rise 0.45s ease-out both;
  animation-delay: calc(var(--mir-rise-i, 0) * 45ms);
}

/* Turbo shows a cached snapshot before the network response. Entrance motion on
   that preview + again on the final render reads as a double load flash. */
html[data-turbo-preview] .mir-rise,
html[data-turbo-preview] .mir-rise-delayed,
html[data-turbo-preview] .mir-rise-list > * {
  animation: none !important;
  opacity: 1;
  transform: none;
}

@media (prefers-reduced-motion: reduce) {
  .mir-rise,
  .mir-rise-delayed,
  .mir-rise-list > * {
    animation: none;
  }
}

/* Auth doorway (Devise layout) */
@keyframes mir-auth-rise {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    /* `none` — not translateY(0). A lingering transform makes position:fixed
       descendants (modals) size to this box instead of the viewport. */
    transform: none;
  }
}

/* Compact attachment thumbs (composer + chat) */
.mir-attach-thumb {
  width: 3rem;
  height: 3rem;
  border-radius: 0.75rem;
  object-fit: cover;
  display: block;
  flex-shrink: 0;
}

.mir-attach-chip {
  position: relative;
}

.mir-attach-chip.is-uploading .mir-attach-thumb {
  opacity: 0.62;
}

.mir-attach-chip__progress {
  position: absolute;
  right: 0.28rem;
  bottom: 0.28rem;
  left: 0.28rem;
}

.mir-upload-bar {
  display: block;
  width: 100%;
  height: 0.28rem;
  overflow: hidden;
  border-radius: 999px;
  background: var(--mir-border);
}

.mir-upload-bar > span {
  display: block;
  height: 100%;
  width: var(--mir-upload-pct, 0%);
  border-radius: inherit;
  background: var(--mir-accent);
  transition: width 120ms ease-out;
}

.mir-upload-bar.is-indeterminate > span {
  width: 36%;
  animation: mir-upload-indeterminate 1s ease-in-out infinite;
}

@media (prefers-reduced-motion: reduce) {
  .mir-upload-bar > span {
    transition: none;
  }

  .mir-upload-bar.is-indeterminate > span {
    animation: none;
    width: 100%;
  }
}

@keyframes mir-upload-indeterminate {
  0% { transform: translateX(-120%); }
  100% { transform: translateX(280%); }
}

/* Change-request live page — keep last cards clear of the main scroller edge.
   Don't rely on Tailwind spacing utilities that may not be in the built CSS. */
.mir-change-request-live {
  padding-bottom: 6rem;
}

.mir-chat-scroll-end {
  display: block;
  width: 100%;
  height: 4rem;
  flex-shrink: 0;
}

/* Managed flash toasts — float above the shell, auto-dismiss with a quiet timer.
   Colors and geometry follow the shared theme in every layout. */
.mir-toast-stack {
  position: fixed;
  right: 24px;
  bottom: 24px;
  z-index: 70;
  display: flex;
  flex-direction: column;
  gap: 10px;
  width: min(23rem, calc(100vw - 32px));
  font-family: "Geist", ui-sans-serif, system-ui, sans-serif;
  pointer-events: none;
}

.mir-toast {
  --toast-accent: var(--mir-brand);
  pointer-events: auto;
  position: relative;
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: start;
  gap: 12px;
  overflow: hidden;
  border: 1px solid var(--mir-border);
  border-radius: var(--mir-radius);
  background: var(--mir-surface);
  color: var(--mir-text);
  box-shadow: var(--mir-shadow-popover);
  padding: 14px 12px 15px 0;
  opacity: 0;
  transform: translateY(8px);
}

.mir-toast.is-in {
  animation: mir-toast-in 0.18s ease-out forwards;
}

.mir-toast.is-out {
  animation: mir-toast-out 0.16s ease-in forwards;
}

/* Tone stripe, flush with the left edge inside the rounded corner. */
.mir-toast__rail {
  width: 3px;
  align-self: stretch;
  margin: -14px 0 -15px;
  background: var(--toast-accent);
}

.mir-toast--alert {
  --toast-accent: var(--mir-danger);
}

.mir-toast__body {
  min-width: 0;
}

/* Eyebrow, not the headline — the message stays the prominent line because
   most callers fall back to a generic tone label ("Saved"). */
.mir-toast__label {
  margin: 0;
  font-size: 12px;
  font-weight: 600;
  line-height: 1.4;
  color: var(--mir-text);
}

.mir-toast__message {
  margin: 2px 0 0;
  font-size: 14px;
  line-height: 1.45;
  color: var(--mir-text);
  overflow-wrap: anywhere;
}

.mir-toast__dismiss {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border: 0;
  border-radius: var(--mir-radius);
  background: transparent;
  color: var(--mir-muted);
  cursor: pointer;
  transition: background-color .15s, color .15s;
}

.mir-toast__dismiss:hover {
  background: var(--mir-subtle);
  color: var(--mir-text);
}

.mir-toast__dismiss:focus-visible {
  outline: 2px solid var(--mir-accent);
  outline-offset: 2px;
}

.mir-toast__dismiss svg {
  width: 16px;
  height: 16px;
}

.mir-toast__timer {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 2px;
  background: var(--mir-subtle);
}

.mir-toast__timer span {
  display: block;
  height: 100%;
  width: 100%;
  transform-origin: left center;
  background: var(--toast-accent);
  animation: mir-toast-timer linear forwards;
}

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

@keyframes mir-toast-out {
  from {
    opacity: 1;
    transform: translateY(0);
  }
  to {
    opacity: 0;
    transform: translateY(4px);
  }
}

@keyframes mir-toast-timer {
  from {
    transform: scaleX(1);
  }
  to {
    transform: scaleX(0);
  }
}

@media (max-width: 640px) {
  .mir-toast-stack {
    right: max(16px, env(safe-area-inset-right, 0px));
    left: max(16px, env(safe-area-inset-left, 0px));
    bottom: max(16px, env(safe-area-inset-bottom, 0px));
    width: auto;
  }

  .mir-toast__dismiss {
    width: 44px;
    height: 44px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .mir-toast.is-in,
  .mir-toast.is-out,
  .mir-toast__timer span {
    animation: none !important;
  }

  .mir-toast.is-in {
    opacity: 1;
    transform: none;
  }
}

/* Confirm modal — styled replacement for window.confirm.
   Prefer <dialog class="mir-confirm"> + showModal() so the overlay paints in the
   browser top layer (escapes <main overflow> / transform clipping). Plain divs
   still work when rendered as a direct child of <body> (shared/confirm). */
.mir-confirm {
  font-family: "Geist", ui-sans-serif, system-ui, sans-serif;
  position: fixed;
  inset: 0;
  z-index: 80;
  display: flex;
  align-items: center;
  justify-content: center;
  /* Fill the visible viewport via inset — avoid 100vh, which overshoots
     mobile browser chrome and clips the footer buttons. */
  width: auto;
  max-width: none;
  height: auto;
  max-height: none;
  margin: 0;
  border: none;
  padding:
    max(1rem, env(safe-area-inset-top, 0px))
    max(1rem, env(safe-area-inset-right, 0px))
    max(1rem, env(safe-area-inset-bottom, 0px))
    max(1rem, env(safe-area-inset-left, 0px));
  background: transparent;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.2s ease;
  box-sizing: border-box;
}

dialog.mir-confirm:not([open]) {
  display: none;
}

dialog.mir-confirm[open] {
  display: flex;
}

.mir-confirm.is-open,
dialog.mir-confirm[open].is-open {
  pointer-events: auto;
  opacity: 1;
}

dialog.mir-confirm::backdrop {
  background: transparent;
}

.mir-confirm__backdrop {
  position: absolute;
  inset: 0;
  background: var(--mir-overlay);
}

.mir-confirm__dialog {
  position: relative;
  display: flex;
  width: 100%;
  max-width: 28rem;
  max-height: min(85dvh, 40rem);
  flex-direction: column;
  overflow: hidden;
  border-radius: var(--mir-radius-lg);
  border: 1px solid var(--mir-border);
  background: var(--mir-surface);
  color: var(--mir-text);
  box-shadow: var(--mir-shadow-popover);
  transform: translateY(0.75rem) scale(0.98);
  transition: transform 0.24s cubic-bezier(0.22, 1, 0.36, 1);
}

@supports not (height: 1dvh) {
  .mir-confirm__dialog {
    max-height: min(85vh, 40rem);
  }
}

@media (min-width: 640px) {
  .mir-confirm__dialog--form {
    max-width: 32rem;
  }
}

.mir-confirm.is-open .mir-confirm__dialog {
  transform: translateY(0) scale(1);
}

body.mir-confirm-open {
  overflow: hidden;
}

.mir-confirm__header {
  display: flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  border-bottom: 1px solid var(--mir-border);
  padding: 1.25rem;
}

.mir-confirm__header .mir-confirm__title {
  min-width: 0;
  overflow-wrap: anywhere;
  font-size: 1.125rem;
  font-weight: 600;
  line-height: 1.35;
  color: var(--mir-text);
  letter-spacing: -.02em;
}

/* Short confirmations keep their heading and message together. Form dialogs
   retain the divided header that anchors their scrollable content. */
#mir_confirm .mir-confirm__header {
  border-bottom: 0;
  padding-bottom: .5rem;
}

#mir_confirm .mir-confirm__body {
  padding-top: 0;
  padding-bottom: 1.5rem;
}

.mir-confirm__close {
  display: inline-flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: var(--mir-radius);
  color: var(--mir-muted);
}

.mir-confirm__close:hover {
  background: var(--mir-subtle);
  color: var(--mir-text);
}

.mir-confirm__body {
  min-height: 0;
  overflow-y: auto;
  overflow-wrap: anywhere;
  padding: 1.25rem;
}

.mir-confirm__dialog--form .mir-confirm__body {
  min-height: 0;
  flex: 1 1 auto;
  overflow-x: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}

.mir-confirm__scroll {
  min-height: 0;
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
}

.mir-confirm__message {
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--mir-text);
  white-space: pre-wrap;
}

.mir-confirm__detail {
  margin-top: 0.5rem;
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--mir-muted);
  white-space: pre-wrap;
}

.mir-confirm__footer {
  display: flex;
  flex-shrink: 0;
  justify-content: flex-end;
  gap: 0.5rem;
  border-top: 1px solid var(--mir-border);
  background: var(--mir-bg);
  flex-wrap: wrap;
  padding: 1rem 1.25rem;
  /* Keep actions above home-indicator when the sheet is near the bottom edge. */
  padding-bottom: max(1rem, env(safe-area-inset-bottom, 0px));
}

.mir-confirm__cancel,
.mir-confirm__confirm {
  border-radius: var(--mir-radius);
  min-height: 44px;
  padding: 0.625rem 1rem;
  font-size: 0.875rem;
  font-weight: 600;
}

.mir-confirm__cancel {
  border: 1px solid var(--mir-border);
  background: var(--mir-surface);
  color: var(--mir-text);
}

.mir-confirm__cancel:hover {
  background: var(--mir-subtle);
}

.mir-confirm__confirm {
  border: 1px solid var(--mir-action);
  background: var(--mir-action);
  color: var(--mir-action-text);
}

.mir-confirm__confirm:hover {
  border-color: var(--mir-action-hover);
  background: var(--mir-action-hover);
}

.mir-confirm__confirm--danger {
  border-color: var(--mir-danger-action);
  background: var(--mir-danger-action);
  color: #fff;
}

.mir-confirm__confirm--danger:hover {
  border-color: var(--mir-danger-action-hover);
  background: var(--mir-danger-action-hover);
}

.mir-confirm :is(.mir-confirm__cancel, .mir-confirm__confirm):disabled {
  opacity: .5;
  cursor: not-allowed;
}

.mir-confirm :is(button, a, input, select, textarea):focus-visible {
  outline: 2px solid var(--mir-action);
  outline-offset: 3px;
}

@media (prefers-reduced-motion: reduce) {
  .mir-confirm,
  .mir-confirm__dialog {
    transition: none;
  }

  .mir-confirm__dialog {
    transform: none;
  }
}

/* Managed shell — mobile drawer + safe areas */
.mir-managed-mobile-header {
  padding-top: max(0.75rem, env(safe-area-inset-top, 0px));
}

.mir-managed-menu-button {
  width: 2.5rem;
  height: 2.5rem;
}

.mir-managed-main {
  padding-bottom: max(1.25rem, env(safe-area-inset-bottom, 0px));
}

/* Let wide visit tables scroll inside the admin page beside the sidebar. */
.mir-managed-main:has(.mir-admin-analytics) {
  min-width: 0;
}


.mir-managed-main.mir-inbox-main,
.mir-managed-main:has(.mir-inbox) {
  padding-bottom: 0;
}

.mir-managed-backdrop {
  position: fixed;
  inset: 0;
  z-index: 40;
  background: var(--mir-overlay);
  backdrop-filter: blur(2px);
}

@media (max-width: 1023px) {
  .mir-managed-sidebar {
    position: fixed;
    inset: 0 auto 0 0;
    z-index: 50;
    width: min(18rem, 88vw);
    height: 100%;
    transform: translateX(-100%);
    transition: transform 0.28s cubic-bezier(0.32, 0.72, 0, 1);
    box-shadow: var(--mir-shadow-popover);
  }

  .mir-managed-sidebar.is-open {
    transform: translateX(0);
  }

  body.mir-managed-nav-open {
    overflow: hidden;
  }
}

@media (min-width: 1024px) {
  .mir-managed-backdrop {
    display: none !important;
  }

  /* Sticky so document-scroll pages keep the rail visible; locked workspaces still fill the viewport. */
  .mir-managed-sidebar {
    position: sticky;
    top: 0;
    z-index: auto;
    width: 14rem;
    height: 100dvh;
    max-height: 100dvh;
    min-height: 0;
    transform: none;
    transition: width 0.2s ease, padding 0.2s ease;
    box-shadow: none;
  }

  /* Desktop icon rail — preference stored as html.mir-sidebar-collapsed */
  html.mir-sidebar-collapsed .mir-managed-sidebar {
    width: 4rem;
    padding-left: 0.5rem;
    padding-right: 0.5rem;
    overflow: visible;
  }

  html.mir-sidebar-collapsed .mir-managed-sidebar .mir-sidebar-label {
    display: none;
  }

  html.mir-sidebar-collapsed .mir-managed-sidebar .mir-sidebar-dashboard-row {
    flex-direction: column;
    align-items: center;
    gap: 0.25rem;
  }

  html.mir-sidebar-collapsed .mir-managed-sidebar .mir-sidebar-nav-link {
    justify-content: center;
    gap: 0;
    flex: none;
    width: 100%;
    padding-left: 0.5rem;
    padding-right: 0.5rem;
  }

  html.mir-sidebar-collapsed .mir-managed-sidebar [data-controller="theme"] {
    justify-content: center;
    gap: 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .mir-managed-sidebar {
    transition: none;
  }
}

/* Block-sender fire control + transparent flame overlay */
.mir-block-fire-btn:hover svg[data-slot="icon"] {
  transform: translateY(-0.5px) scale(1.06);
  transition: transform 0.2s ease;
}

.mir-block-fire-btn svg[data-slot="icon"] {
  transition: transform 0.2s ease;
}

/* Rise → settle → slow jitter → fade. translateY stays >= 0 (base never above card bottom). */
@keyframes mir-burn-sheet {
  0% {
    opacity: 1;
    transform: translate3d(0, 110%, 0);
  }
  16% {
    opacity: 1;
    transform: translate3d(0, 0%, 0);
  }
  26% {
    opacity: 1;
    transform: translate3d(0, 14%, 0);
  }
  40% {
    opacity: 1;
    transform: translate3d(0, 0%, 0);
  }
  54% {
    opacity: 1;
    transform: translate3d(0, 12%, 0);
  }
  68% {
    opacity: 1;
    transform: translate3d(0, 0%, 0);
  }
  80% {
    opacity: 1;
    transform: translate3d(0, 8%, 0);
  }
  100% {
    opacity: 0;
    transform: translate3d(0, 24%, 0);
  }
}

.mir-burn__stage {
  position: absolute;
  inset: 0;
  z-index: 8;
  overflow: hidden;
  pointer-events: none;
  border-radius: inherit;
}

.mir-burn__sheet {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 2;
  width: 100%;
  aspect-ratio: 1024 / 148;
  max-height: 100%;
  background-position: center bottom;
  background-repeat: no-repeat;
  background-size: 100% 100%;
  animation: mir-burn-sheet 1.55s cubic-bezier(0.4, 0.05, 0.2, 1) both;
}

@media (prefers-reduced-motion: reduce) {
  .mir-burn__stage {
    display: none;
  }
}

/* Hosted-site analytics, within the shared admin shell. */
.mir-analytics-live { margin-top: 1rem; font-size: .875rem; color: var(--mir-muted); }
.mir-analytics-live > span:first-child { color: var(--mir-success); }
.mir-analytics-live > span:last-child { color: var(--mir-muted); }
.mir-analytics-period { display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; margin: 1.5rem 0 1rem; font-size: .875rem; }
.mir-analytics-period p > span { color: var(--mir-muted); margin-left: .5rem; }
.mir-analytics-period nav, .mir-analytics-filter-chips { display: flex; flex-wrap: wrap; gap: .5rem; }
.mir-analytics-period a, .mir-analytics-filter-chips a { padding: .5rem .75rem; border: 1px solid var(--mir-border); border-radius: var(--mir-radius); background: var(--mir-surface); color: var(--mir-accent); font-size: .875rem; overflow-wrap: anywhere; }
.mir-analytics-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border: 1px solid var(--mir-border); border-radius: var(--mir-radius-lg); background: var(--mir-surface); overflow: hidden; margin-bottom: 1rem; }
.mir-analytics-metric { padding: 1.25rem; border-right: 1px solid var(--mir-border); border-bottom: 1px solid var(--mir-border); }
.mir-analytics-metric h2 { font-size: .8125rem; color: var(--mir-muted); }
.mir-analytics-metric > strong { display: block; font-size: 2rem; line-height: 1.5; letter-spacing: -.04em; font-weight: 600; }
.mir-analytics-metric p { font-size: .75rem; color: var(--mir-muted); }
.mir-analytics-panel { min-width: 0; border: 1px solid var(--mir-border); border-radius: var(--mir-radius-lg); background: var(--mir-surface); padding: 1.25rem; }
.mir-analytics-panel-heading { display: flex; justify-content: space-between; align-items: center; gap: .75rem; margin-bottom: 1rem; }
.mir-analytics-panel-heading h2 { font-weight: 600; }
.mir-analytics-panel-heading > span { color: var(--mir-muted); font-size: .75rem; white-space: nowrap; }
.mir-analytics-breakdowns { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; margin: 1rem 0; }
.mir-analytics-ranking { display: grid; gap: .375rem; }
.mir-analytics-rank-row { position: relative; display: flex; align-items: center; gap: .75rem; padding: .6rem .65rem; border-radius: var(--mir-radius-sm); min-width: 0; font-size: .8125rem; isolation: isolate; }
.mir-analytics-rank-row:hover { background: var(--mir-subtle); }
.mir-analytics-rank-bar { position: absolute; inset: 0 auto 0 0; background: var(--mir-accent-soft); border-radius: var(--mir-radius-sm); z-index: -1; }
.mir-analytics-rank-label { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.mir-analytics-rank-row strong { font-variant-numeric: tabular-nums; font-weight: 600; }
.mir-analytics-rank-row small { width: 3.5rem; text-align: right; color: var(--mir-muted); font-variant-numeric: tabular-nums; }
.mir-analytics-empty { padding: 2rem 0; color: var(--mir-muted); font-size: .875rem; }
.mir-analytics-chart { width: 100%; height: auto; min-height: 140px; overflow: visible; }
.mir-analytics-gridline { stroke: var(--mir-border); stroke-dasharray: 4 5; }
.mir-analytics-chart-area { fill: var(--mir-accent-soft); opacity: .6; }
.mir-analytics-chart-views { stroke: var(--mir-accent); stroke-width: 2.5; fill: none; vector-effect: non-scaling-stroke; }
.mir-analytics-chart-visitors { stroke: var(--mir-chart-secondary); stroke-width: 2; fill: none; stroke-dasharray: 5 4; vector-effect: non-scaling-stroke; }
.mir-analytics-chart-point { fill: var(--mir-accent); }
.mir-analytics-chart-point:hover { r: 7; }
.mir-analytics-chart-axis { display: flex; justify-content: space-between; gap: .75rem; color: var(--mir-muted); font-size: .75rem; }
.mir-analytics-legend { display: flex; gap: 1rem; font-size: .75rem; }
.mir-analytics-legend span:first-child { color: var(--mir-accent); }
.mir-analytics-legend span:last-child { color: var(--mir-chart-secondary); }
.mir-analytics-chart-data { margin-top: 1rem; font-size: .75rem; color: var(--mir-muted); }
.mir-analytics-chart-data ul { max-height: 12rem; overflow-y: auto; margin-top: .75rem; }
.mir-analytics-definitions { margin: 1.25rem 0 2rem; color: var(--mir-muted); font-size: .8125rem; }
.mir-analytics-definitions p { margin-top: .75rem; max-width: 85ch; line-height: 1.6; }
.mir-analytics-definitions summary, .mir-analytics-chart-data summary { cursor: pointer; }
.mir-analytics-subheading { margin: 1.25rem 0 .5rem; font-size: .8125rem; font-weight: 600; }
@media (min-width: 1500px) { .mir-analytics-metrics { grid-template-columns: repeat(6, minmax(0, 1fr)); } }
@media (max-width: 640px) {
  .mir-analytics-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mir-analytics-metric { padding: 1rem; }
  .mir-analytics-metric > strong { font-size: 1.75rem; }
  .mir-analytics-breakdowns { grid-template-columns: minmax(0, 1fr); }
  .mir-analytics-panel { padding: 1rem; }
  .mir-analytics-chart-axis span:nth-child(2) { display: none; }
}
.mir-analytics-event-help { font-size: .75rem; color: var(--mir-muted); margin-bottom: .5rem; }
