/* ==========================================================================
   Alex2MQTT — shared stylesheet
   Self-hosted, no external fonts or frameworks. System font stack.
   Light + dark themes driven by the same CSS custom properties.

   Token names and light/dark values are estate-ui's (src/theme.css, the estate
   dashboards), copied by hand so the site matches them without a build step:
   --bg --surface --surface-2 --border --text --muted --accent --accent-weak
   --accent-solid --active --active-bg --danger --danger-bg --danger-text --shadow
   --radius --radius-sm --font --mono --touch --z-header. Site-only tokens:
   --heading --accent-hover --warn --warn-bg --maxw. Body text stays 16px (a
   reading page, not a dashboard).

   Theme: follows the OS unless <html data-theme="light|dark"> is set (the header
   toggle, remembered in localStorage "theme" — the estate-ui convention).
   ========================================================================== */

:root {
  color-scheme: light;

  /* Palette — light */
  --bg: #f5f6f8;
  --surface: #ffffff;
  --surface-2: #f0f2f5;
  --border: #e2e5ea;
  --text: #1a1d21;
  --muted: #5d6677;
  --heading: #12161c;

  --accent: #2563eb; /* links and accent text */
  --accent-solid: #2563eb; /* the fill behind white button text */
  --accent-hover: #1d4ed8;
  --accent-weak: #dbe4ff; /* soft tint: hovered rows, the current nav item */

  --danger: #dc2626;
  --danger-bg: #fde8e8;
  --danger-text: #b91c1c; /* danger text on --danger-bg */
  --active: #15803d;
  --active-bg: #dcfce7;
  --warn: #b45309;
  --warn-bg: #f5e7dd;

  --shadow: 0 1px 2px rgba(16, 24, 40, 0.06), 0 1px 3px rgba(16, 24, 40, 0.1);

  --radius: 10px;
  --radius-sm: 7px;
  --touch: 44px; /* the minimum tap target */
  --z-header: 10;
  --maxw: 880px;

  --font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial,
    sans-serif;
  --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
}

/* Palette — dark: the OS preference, unless the toggle chose light ... */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme: dark;
    --bg: #0e1116;
    --surface: #161a22;
    --surface-2: #1c212b;
    --border: #272d38;
    --text: #e6e9ee;
    --muted: #97a1b0;
    --heading: #f2f5f9;
    --accent: #4b8bf5;
    --accent-solid: #2f6fdc;
    --accent-hover: #3d80ea;
    --accent-weak: #1e2a44;
    --danger: #f87171;
    --danger-bg: #3a1a1a;
    --danger-text: #f87171;
    --active: #34d399;
    --active-bg: #123524;
    --warn: #f0a53d;
    --warn-bg: #3a2a12;
    --shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
  }
}
/* ... or the toggle chose dark (the same values again: no preprocessor here) */
:root[data-theme="dark"] {
  color-scheme: dark;
  --bg: #0e1116;
  --surface: #161a22;
  --surface-2: #1c212b;
  --border: #272d38;
  --text: #e6e9ee;
  --muted: #97a1b0;
  --heading: #f2f5f9;
  --accent: #4b8bf5;
  --accent-solid: #2f6fdc;
  --accent-hover: #3d80ea;
  --accent-weak: #1e2a44;
  --danger: #f87171;
  --danger-bg: #3a1a1a;
  --danger-text: #f87171;
  --active: #34d399;
  --active-bg: #123524;
  --warn: #f0a53d;
  --warn-bg: #3a2a12;
  --shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
}

/* ---------- Reset / base ---------- */
*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  font-family: var(--font);
  font-size: 16px;
  line-height: 1.65;
  color: var(--text);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

a {
  color: var(--accent);
  text-decoration: none;
}
a:hover {
  text-decoration: underline;
}

img {
  max-width: 100%;
  height: auto;
}

button,
a {
  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
}

/* Keyboard focus, the estate-ui ring (mouse clicks show nothing) */
a:focus-visible,
button:focus-visible,
[tabindex]:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* ---------- Skip link ---------- */
.skip-link {
  position: absolute;
  left: 16px;
  top: -100px;
  z-index: 100;
  padding: 10px 14px;
  border-radius: var(--radius-sm);
  background: var(--accent-solid);
  color: #fff;
  font-weight: 600;
}
.skip-link:focus {
  top: 12px;
}

/* ---------- Header / nav ---------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: var(--z-header);
  background: var(--surface);
  border-bottom: 1px solid var(--border);
}

.nav-inner {
  max-width: var(--maxw);
  margin: 0 auto;
  padding: 8px 16px;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px 14px;
}

.brand {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  min-height: var(--touch);
  font-weight: 700;
  font-size: 1.15rem;
  letter-spacing: -0.01em;
  color: var(--heading);
}
.brand:hover {
  text-decoration: none;
}
.brand-mark {
  width: 26px;
  height: 26px;
  border-radius: 7px;
  background: linear-gradient(135deg, var(--accent), var(--accent-hover));
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.15);
  flex: none;
}

.nav {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px;
  margin: 0 0 0 auto;
  padding: 0;
  list-style: none;
}
.nav a {
  display: inline-flex;
  align-items: center;
  min-height: 40px;
  padding: 8px 12px;
  border-radius: 8px;
  color: var(--muted);
  font-weight: 500;
  font-size: 0.95rem;
}
.nav a:hover {
  color: var(--text);
  background: var(--surface-2);
  text-decoration: none;
}
.nav a[aria-current="page"] {
  color: var(--accent);
  background: var(--accent-weak);
}

.header-tools {
  display: flex;
  align-items: center;
  gap: 4px;
}

/* Icon-only header buttons (theme toggle, phone menu) */
.icon-btn {
  appearance: none;
  -webkit-appearance: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  padding: 0;
  border: 1px solid var(--border);
  border-radius: 999px;
  background: var(--surface-2);
  color: var(--muted);
  cursor: pointer;
}
.icon-btn:hover {
  color: var(--text);
}
.icon-btn svg {
  width: 20px;
  height: 20px;
  display: block;
}

/* The toggle shows the theme in effect (sun = light, moon = dark), picked by CSS so it
   is right before any script runs and without JS */
.theme-toggle .icon-moon {
  display: none;
}
:root[data-theme="dark"] .theme-toggle .icon-sun {
  display: none;
}
:root[data-theme="dark"] .theme-toggle .icon-moon {
  display: block;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .theme-toggle .icon-sun {
    display: none;
  }
  :root:not([data-theme="light"]) .theme-toggle .icon-moon {
    display: block;
  }
}

/* The menu button only exists on phones with JS (see the 560px block); the theme button needs /site.js
   to do anything, so it is shown only when that file loaded (html.js, dropped again by its onerror) */
.nav-toggle,
.theme-toggle {
  display: none;
}
.js .theme-toggle {
  display: inline-flex;
}

@media (pointer: coarse) {
  .icon-btn {
    width: var(--touch);
    height: var(--touch);
  }
  .nav a {
    min-height: var(--touch);
  }
}

/* ---------- Layout ---------- */
.container {
  width: 100%;
  max-width: var(--maxw);
  margin: 0 auto;
  padding: 30px 16px 48px;
  flex: 1 0 auto;
}
.container:focus-visible {
  outline: none; /* the skip link's target */
}

.center-screen {
  flex: 1 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 40px 16px;
}

/* ---------- Cards ---------- */
.card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  padding: 24px 26px;
  margin: 0 0 22px;
}
.card:last-child {
  margin-bottom: 0;
}
.card--narrow {
  max-width: 440px;
  margin-left: auto;
  margin-right: auto;
}

/* ---------- Typography ---------- */
h1,
h2,
h3,
h4 {
  color: var(--heading);
  line-height: 1.25;
  letter-spacing: -0.01em;
}
h1 {
  font-size: 1.8rem;
  margin: 0 0 0.5em;
}
h2 {
  font-size: 1.35rem;
  margin: 0 0 0.6em;
}
h3 {
  font-size: 1.12rem;
  margin: 1.5em 0 0.5em;
}
h4 {
  font-size: 1rem;
  margin: 1.4em 0 0.4em;
}
.card > h1:first-child,
.card > h2:first-child,
.card > h3:first-child {
  margin-top: 0;
}

p {
  margin: 0 0 1em;
}
p:last-child {
  margin-bottom: 0;
}
.muted {
  color: var(--muted);
}
.lead {
  font-size: 1.08rem;
  color: var(--muted);
}
.text-center {
  text-align: center;
}

/* Reading content (privacy, tou, examples) */
.prose h2 {
  margin-top: 1.7em;
}
.prose h3 {
  margin-top: 1.6em;
}
.prose ol,
.prose ul {
  padding-left: 1.35em;
  margin: 0 0 1em;
}
.prose li {
  margin: 0.3em 0;
}
.prose li:last-child {
  margin-bottom: 0;
}
.prose a {
  overflow-wrap: anywhere; /* long mailto / URL text must not push past 320 px */
}

/* ---------- Code ---------- */
code {
  font-family: var(--mono);
  font-size: 0.88em;
  background: var(--surface-2);
  border: 1px solid var(--border);
  padding: 0.12em 0.4em;
  border-radius: 6px;
  word-break: break-word;
}

pre {
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 16px 18px;
  margin: 0 0 1em;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  font-family: var(--mono);
  font-size: 0.86rem;
  line-height: 1.5;
  tab-size: 2;
  color: var(--text);
}
pre code {
  background: none;
  border: none;
  padding: 0;
  font-size: inherit;
}

/* site.js wraps every <pre><code> in .code-block and adds a Copy button; [data-copy]
   values (the credentials page) get one inline */
.code-block {
  position: relative;
  margin: 0 0 1em;
}
.code-block > pre {
  margin: 0;
}
.copy-btn {
  position: absolute;
  top: 8px;
  right: 8px;
  display: inline-flex;
  align-items: center;
  min-height: 32px;
  padding: 4px 12px;
  font: 600 0.78rem/1 var(--font);
  color: var(--muted);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 999px;
  cursor: pointer;
  white-space: nowrap;
}
.copy-btn:hover {
  color: var(--text);
  border-color: var(--accent);
}
.copy-btn.is-done {
  color: var(--active);
  border-color: var(--active);
}
@media (pointer: coarse) {
  .copy-btn {
    min-height: 40px;
    padding: 4px 14px;
  }
}

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: var(--touch);
  padding: 10px 18px;
  font-family: inherit;
  font-size: 0.98rem;
  font-weight: 600;
  line-height: 1.1;
  color: #fff;
  background: var(--accent-solid);
  border: 1px solid transparent;
  border-radius: var(--radius);
  cursor: pointer;
  text-decoration: none;
  transition: background-color 0.15s ease, transform 0.03s ease,
    box-shadow 0.15s ease;
}
.btn:hover {
  color: #fff;
  background: var(--accent-hover);
  text-decoration: none;
}
.btn:active {
  transform: translateY(1px);
}
.btn:disabled,
.btn[aria-busy="true"] {
  opacity: 0.65;
  cursor: progress;
  transform: none;
}
.btn--secondary {
  color: var(--text);
  background: var(--surface-2);
  border-color: var(--border);
}
.btn--secondary:hover {
  color: var(--accent);
  background: var(--surface-2);
  border-color: var(--accent);
}
.btn--danger {
  color: var(--danger-text);
  background: var(--danger-bg);
}
.btn--danger:hover {
  color: var(--danger-text);
  background: var(--danger-bg);
  border-color: var(--danger-text);
}
.btn--sm {
  min-height: 36px;
  padding: 7px 13px;
  font-size: 0.86rem;
  border-radius: 8px;
}

.actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin: 4px 0 20px;
}
.cta {
  margin: 18px 0 0;
}

/* ---------- Status pill (Alexa updates state) ---------- */
.status {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 6px;
  padding: 8px 14px;
  border-radius: 999px;
  font-size: 0.98rem;
  font-weight: 600;
}
.status::before {
  content: "";
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: currentColor;
  flex: none;
}
.status--ok {
  color: var(--active);
  background: var(--active-bg);
}
.status--warn {
  color: var(--warn);
  background: var(--warn-bg);
}
.status--expired {
  color: var(--danger-text);
  background: var(--danger-bg);
}

/* ---------- Empty state ---------- */
.empty {
  margin: 0;
  padding: 18px 16px;
  text-align: center;
  color: var(--muted);
  background: var(--surface-2);
  border: 1px dashed var(--border);
  border-radius: var(--radius-sm);
}

/* ---------- Tables ---------- */
.table-wrap {
  width: 100%;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
}

table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.95rem;
}
thead th {
  text-align: left;
  padding: 12px 15px;
  background: var(--surface-2);
  color: var(--muted);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  white-space: nowrap;
  border-bottom: 1px solid var(--border);
}
tbody td,
tbody th {
  padding: 12px 15px;
  border-bottom: 1px solid var(--border);
  vertical-align: middle;
  text-align: left;
}
tbody tr:last-child td,
tbody tr:last-child th {
  border-bottom: none;
}
tbody tr:hover td {
  background: var(--accent-weak);
}

/* Key/value credentials table (row headers) */
.creds th {
  width: 1%;
  white-space: nowrap;
  background: var(--surface-2);
  color: var(--muted);
  font-weight: 600;
  font-size: 0.9rem;
  vertical-align: top;
  padding-top: 14px;
}
.creds tr:hover td {
  background: transparent;
}
.cred-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px 12px;
}
.cred-value {
  min-width: 0;
  font-size: 0.9rem;
  word-break: break-all;
  background: none;
  border: 0;
  padding: 0;
  color: var(--text);
}
.cred-row .copy-btn {
  position: static;
  flex: none;
}
.cred-hint {
  margin: 4px 0 0;
  font-size: 0.85rem;
  color: var(--muted);
}

/* ---------- Feature grid (landing) ---------- */
.feature-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 16px;
  margin: 0;
  padding: 0;
  list-style: none;
}
.feature {
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 16px 18px;
}
.feature h3 {
  margin: 0 0 0.35em;
  font-size: 1.02rem;
}
.feature p {
  margin: 0;
  color: var(--muted);
  font-size: 0.95rem;
}

/* ---------- Steps (landing: getting started) ---------- */
.steps {
  counter-reset: step;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 12px;
  margin: 0;
  padding: 0;
  list-style: none;
}
.steps li {
  position: relative;
  padding: 14px 16px 14px 54px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  font-size: 0.95rem;
}
.steps li::before {
  counter-increment: step;
  content: counter(step);
  position: absolute;
  left: 14px;
  top: 13px;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--accent-solid);
  color: #fff;
  font-weight: 700;
  font-size: 0.9rem;
}

/* ---------- Changelog (What's New) ---------- */
.changelog {
  margin: 0;
  padding: 0;
  list-style: none;
}
.changelog li {
  position: relative;
  padding-left: 22px;
  margin: 0 0 0.7em;
  color: var(--text);
}
.changelog li::before {
  content: "";
  position: absolute;
  left: 3px;
  top: 0.62em;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--accent);
}
.changelog li:last-child {
  margin-bottom: 0;
}

/* ---------- Tabs (code example selector) ---------- */
.tablist {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0 0 16px;
  padding: 4px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 11px;
}
.tab {
  appearance: none;
  -webkit-appearance: none;
  flex: 1 1 auto;
  min-height: 40px;
  padding: 8px 14px;
  font-family: inherit;
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--muted);
  background: transparent;
  border: 1px solid transparent;
  border-radius: 8px;
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.tab:hover {
  color: var(--text);
}
.tab[aria-selected="true"] {
  color: #fff;
  background: var(--accent-solid);
}
.tabpanel {
  outline: none;
}
.tabpanel[hidden] {
  display: none;
}
.tabpanel > :first-child {
  margin-top: 0;
}
.source-link {
  margin-top: 0.8em;
}

/* ---------- Login with Amazon ---------- */
.login-section {
  text-align: center;
  padding: 12px 0 6px;
}
.login-section p {
  color: var(--muted);
  margin-bottom: 18px;
}
/* The official LWA image is 156x32; the anchor around it is the tap target */
.lwa-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--touch);
  min-width: 176px;
  padding: 6px 10px;
  border-radius: var(--radius);
  line-height: 0;
}
.lwa-btn:hover {
  background: var(--surface-2);
}
.lwa-btn img {
  border-radius: 6px;
}

/* ---------- Footer ---------- */
.site-footer {
  flex-shrink: 0;
  margin-top: auto;
  border-top: 1px solid var(--border);
  background: var(--surface);
  color: var(--muted);
  text-align: center;
  padding: 16px 16px 22px;
  font-size: 0.9rem;
}
.site-footer p {
  margin: 0;
}
.footer-nav {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 4px 8px;
  margin: 0 0 4px;
}
.footer-nav a {
  display: inline-flex;
  align-items: center;
  min-height: 40px;
  padding: 4px 8px;
  color: var(--muted);
}
.footer-nav a:hover,
.footer-nav a[aria-current="page"] {
  color: var(--accent);
}

/* ---------- Loading spinner (account-linking redirect) ---------- */
.spinner {
  width: 42px;
  height: 42px;
  margin: 0 auto 18px;
  border-radius: 50%;
  border: 3px solid var(--border);
  border-top-color: var(--accent);
  animation: spin 0.8s linear infinite;
}
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

/* ---------- Responsive ---------- */
@media (max-width: 560px) {
  body {
    font-size: 15.5px;
  }
  .nav-inner {
    padding: 6px 14px;
    gap: 4px 10px;
  }
  .brand {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 1.05rem;
  }
  .header-tools {
    margin-left: auto;
  }
  /* Without JS the nav wraps under the brand row, as before */
  .site-header nav {
    flex: 1 1 100%;
    order: 3;
  }
  .nav a {
    padding: 8px 10px;
    font-size: 0.9rem;
  }
  /* With JS (head.ejs sets html.js) the nav folds behind the Menu button: one 56px row */
  .js .nav-toggle {
    display: inline-flex;
  }
  .js .site-header nav {
    display: none;
    position: absolute;
    left: 0;
    right: 0;
    top: 100%;
    padding: 6px 14px 10px;
    background: var(--surface);
    border-bottom: 1px solid var(--border);
    box-shadow: var(--shadow);
  }
  .js .site-header.nav-open nav {
    display: block;
  }
  .js .nav {
    flex-direction: column;
    align-items: stretch;
    gap: 2px;
    width: 100%;
    margin: 0;
  }
  .js .nav a {
    display: flex;
    min-height: var(--touch);
    font-size: 1rem;
  }
  .container {
    padding: 22px 14px 40px;
  }
  .card {
    padding: 18px 16px;
  }
  h1 {
    font-size: 1.5rem;
  }
  h2 {
    font-size: 1.2rem;
  }
  .cta .btn {
    flex: 1 1 auto;
  }

  /* Credentials: the label above its value, so a 64-character token gets the full width */
  .creds tbody,
  .creds tr,
  .creds th,
  .creds td {
    display: block;
    width: auto;
    white-space: normal;
  }
  .creds th {
    padding: 9px 14px 3px;
    font-size: 0.78rem;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    border-bottom: 0;
  }
  .creds td {
    padding: 8px 14px 12px;
    border-bottom: 1px solid var(--border);
  }
  .creds tr:last-child td {
    border-bottom: 0;
  }

  /* A wide table becomes one card per row; each cell carries its heading in data-label */
  .table--stack thead {
    display: none;
  }
  .table--stack tbody tr {
    display: block;
    padding: 8px 14px 12px;
    border-bottom: 1px solid var(--border);
  }
  .table--stack tbody tr:last-child {
    border-bottom: 0;
  }
  .table--stack tbody tr:hover td {
    background: transparent;
  }
  .table--stack tbody td {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 12px;
    padding: 5px 0;
    border: 0;
    text-align: right;
    overflow-wrap: anywhere;
  }
  .table--stack tbody td::before {
    content: attr(data-label);
    flex: none;
    color: var(--muted);
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    text-align: left;
  }
  .table--stack tbody td.cell-action {
    display: block;
    padding-top: 10px;
  }
  .table--stack tbody td.cell-action::before {
    content: none;
  }
  .table--stack tbody td.cell-action .btn {
    width: 100%;
    min-height: var(--touch);
  }
}

/* ---------- Print ---------- */
@media print {
  .skip-link,
  .site-header,
  .site-footer,
  .copy-btn,
  .tablist,
  .lwa-btn {
    display: none !important;
  }
  body {
    background: #fff;
    color: #000;
  }
  .card {
    box-shadow: none;
    border-color: #999;
  }
  a {
    color: inherit;
    text-decoration: underline;
  }
  .tabpanel[hidden] {
    display: block; /* print every platform's example */
  }
  pre {
    white-space: pre-wrap;
    overflow: visible;
    border-color: #999;
  }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  * {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
}
